J2html GitHub

Một thẻ đã tồn tại với tên chi nhánh được cung cấp. Nhiều lệnh Git chấp nhận cả tên thẻ và tên nhánh, vì vậy việc tạo nhánh này có thể gây ra hành vi không mong muốn. Bạn có chắc chắn muốn tạo nhánh này không?

Một thẻ đã tồn tại với tên chi nhánh được cung cấp. Nhiều lệnh Git chấp nhận cả tên thẻ và tên nhánh, vì vậy việc tạo nhánh này có thể gây ra hành vi không mong muốn. Bạn có chắc chắn muốn tạo nhánh này không?

J2html GitHub
J2html GitHub
J2html GitHub

j2html

Trình tạo Java sang HTML. Tận hưởng thế hệ HTML typesafe

Trang web dự án là j2html. com

Bắt đầu

Thêm phụ thuộc maven

<dependency>
    <groupId>com.j2htmlgroupId>
    <artifactId>j2htmlartifactId>
    <version>1.6.0version>
dependency>

Hoặc sự phụ thuộc lớp

compile 'com.j2html:j2html:1.6.0'

Nhập TagCreator và bắt đầu xây dựng HTML

import static j2html.TagCreator.*;

public class Main {
    public static void main(String[] args) {
        body(
            h1("Hello, World!"),
            img().withSrc("/img/hello.png")
        ).render();
    }
}

Java ở trên sẽ dẫn đến HTML sau

<body>
    <h1>Hello, World!h1>
    <img src="/img/hello.png">
body>

Tìm thêm ví dụ tại http. //j2html. com/ví dụ. html

Một thẻ đã tồn tại với tên chi nhánh được cung cấp. Nhiều lệnh Git chấp nhận cả tên thẻ và tên nhánh, vì vậy việc tạo nhánh này có thể gây ra hành vi không mong muốn. Bạn có chắc chắn muốn tạo nhánh này không?

Như đã nêu trong README, Mục tiêu của Dự án này là tận hưởng việc tạo HTML hiệu quả, an toàn về kiểu chữ trong Java

Để ngăn chặn hồi quy hiệu suất, có các bài kiểm tra

Phong cách mã hóa

Có một

<body>
    <h1>Hello, World!h1>
    <img src="/img/hello.png">
body>
4 và một
<body>
    <h1>Hello, World!h1>
    <img src="/img/hello.png">
body>
5

Điều nổi bật là cuối dòng đó là CRLF

<body>
    <h1>Hello, World!h1>
    <img src="/img/hello.png">
body>
6 cho Dự án này

Điều này có nghĩa là nếu bạn đang sử dụng Linux

<body>
    <h1>Hello, World!h1>
    <img src="/img/hello.png">
body>
7, bạn phải định cấu hình git để xử lý việc này một cách chính xác để bạn có đúng EOL trong thư mục làm việc của mình và EOL cũng chính xác trong chính kho lưu trữ

Với mục đích này, j2html có tệp

<body>
    <h1>Hello, World!h1>
    <img src="/img/hello.png">
body>
8

Hướng dẫn cấu hình EOL với git

Nếu bạn đang dùng Windows, sẽ không có vấn đề gì

Định dạng lại mã Java được tạo

Vì Dự án này sử dụng các kỹ thuật Tạo mã để tạo API an toàn hơn mà không cần thực hiện quá nhiều công việc thủ công, nên có thư mục

<body>
    <h1>Hello, World!h1>
    <img src="/img/hello.png">
body>
9 chứa mọi thứ cần thiết để tạo mã

Để đơn giản (và cũng để tránh phụ thuộc thêm), họ không định dạng mã chính xác

Vì vậy, nếu bạn thay đổi Mã tạo mã, bạn có thể cần phải định dạng lại các tệp được tạo để phù hợp với Kiểu viết mã

quy trình đóng góp

Quy trình công việc (hầu hết thời gian) bao gồm

  • Comment (về Issue hoặc PR) để tìm hiểu nhu cầu Work
  • Nhận phản hồi về ý tưởng của bạn
  • Ngã ba repo này
  • mở PR
  • Điều chỉnh PR cho đến khi nó được hợp nhất hoặc loại bỏ

Kiến trúc dự án

thư viện/src/main/java/j2html/TagCreator. java

Đây là lớp trung tâm trong J2HTML. Nó cung cấp các phương thức cho người dùng J2HTML để tạo tất cả các Thẻ HTML. Nó chứa các phương thức như

public static HtmlTag html(DomContent.. dc) {
    return new HtmlTag().with(dc);
}

có thể được sử dụng trong Dự án sử dụng phụ thuộc này như

html(
    head(
        script("https://example.com/my/js/files.js")
    ),
    body(
        div(
            h1("Hello World")
        ).withClasses("container")
    )
)

Các Thẻ HTML khác nhau được triển khai như thế nào?

Mỗi Thẻ HTML có lớp riêng, giúp mỗi Thẻ có các Thuộc tính và Phương thức chính xác để đặt các Thuộc tính đó

Các lớp được đặt tại

html(
    head(
        script("https://example.com/my/js/files.js")
    ),
    body(
        div(
            h1("Hello World")
        ).withClasses("container")
    )
)
0 và tuân theo quy ước đặt tên
html(
    head(
        script("https://example.com/my/js/files.js")
    ),
    body(
        div(
            h1("Hello World")
        ).withClasses("container")
    )
)
1, e. g.
html(
    head(
        script("https://example.com/my/js/files.js")
    ),
    body(
        div(
            h1("Hello World")
        ).withClasses("container")
    )
)
2. Lưu ý rằng chữ cái đầu tiên của Tag được viết hoa

Mỗi giao diện lớp

html(
    head(
        script("https://example.com/my/js/files.js")
    ),
    body(
        div(
            h1("Hello World")
        ).withClasses("container")
    )
)
3 dành riêng cho Thẻ tương ứng với các Thuộc tính có thể được đặt trên các Thẻ này

Để tham khảo Thẻ nào hỗ trợ Thuộc tính nào, hãy xem Tham chiếu thuộc tính HTML

Ví dụ:

html(
    head(
        script("https://example.com/my/js/files.js")
    ),
    body(
        div(
            h1("Hello World")
        ).withClasses("container")
    )
)
4 có thể triển khai
html(
    head(
        script("https://example.com/my/js/files.js")
    ),
    body(
        div(
            h1("Hello World")
        ).withClasses("container")
    )
)
5 cho biết nó có thể có Thuộc tính
html(
    head(
        script("https://example.com/my/js/files.js")
    ),
    body(
        div(
            h1("Hello World")
        ).withClasses("container")
    )
)
6, thuộc tính này sau đó có thể hiển thị như
html(
    head(
        script("https://example.com/my/js/files.js")
    ),
    body(
        div(
            h1("Hello World")
        ).withClasses("container")
    )
)
7

Các thuộc tính của thẻ HTML được triển khai như thế nào?

Mỗi Thuộc tính có giao diện riêng trong

html(
    head(
        script("https://example.com/my/js/files.js")
    ),
    body(
        div(
            h1("Hello World")
        ).withClasses("container")
    )
)
8 và tuân theo quy ước đặt tên
html(
    head(
        script("https://example.com/my/js/files.js")
    ),
    body(
        div(
            h1("Hello World")
        ).withClasses("container")
    )
)
9, e. g.
compile 'com.j2html:j2html:1.6.0'
60. Lưu ý rằng chữ cái đầu tiên của Thuộc tính được viết hoa

Mổ xẻ

compile 'com.j2html:j2html:1.6.0'
60

compile 'com.j2html:j2html:1.6.0'
6

Như bạn có thể thấy, IAccept mở rộng

compile 'com.j2html:j2html:1.6.0'
62 chỉ cung cấp Phương thức
compile 'com.j2html:j2html:1.6.0'
63 để truy cập một thể hiện của loại
compile 'com.j2html:j2html:1.6.0'
64. Tất cả các giao diện dành riêng cho thuộc tính mở rộng
compile 'com.j2html:j2html:1.6.0'
62

import static j2html.TagCreator.*;

public class Main {
    public static void main(String[] args) {
        body(
            h1("Hello, World!"),
            img().withSrc("/img/hello.png")
        ).render();
    }
}
3

compile 'com.j2html:j2html:1.6.0'
62 đang gian lận hệ thống loại vì
compile 'com.j2html:j2html:1.6.0'
63 trả về một thể hiện của loại
compile 'com.j2html:j2html:1.6.0'
64, nhưng về mặt kỹ thuật, lớp triển khai không phải cung cấp loại của chính nó làm đối số loại. Nhưng theo quy ước, trong Dự án này, lớp triển khai luôn cung cấp kiểu của chính nó làm đối số kiểu

Nhưng trong các phương thức

compile 'com.j2html:j2html:1.6.0'
69 trong giao diện, AFAIK không có cách nào để có được loại lớp đang triển khai giao diện. Nếu bạn tìm ra cách, đó sẽ là một PR tuyệt vời

Các lớp/giao diện đặc biệt ngoài TagCreator. java

Có 3 lớp chứa các phương thức tạo mã trong

import static j2html.TagCreator.*;

public class Main {
    public static void main(String[] args) {
        body(
            h1("Hello, World!"),
            img().withSrc("/img/hello.png")
        ).render();
    }
}
30

  • import static j2html.TagCreator.*;
    
    public class Main {
        public static void main(String[] args) {
            body(
                h1("Hello, World!"),
                img().withSrc("/img/hello.png")
            ).render();
        }
    }
    31 (tạo giao diện cho các thuộc tính)
  • import static j2html.TagCreator.*;
    
    public class Main {
        public static void main(String[] args) {
            body(
                h1("Hello, World!"),
                img().withSrc("/img/hello.png")
            ).render();
        }
    }
    32 (tạo các lớp cho các thẻ)
  • import static j2html.TagCreator.*;
    
    public class Main {
        public static void main(String[] args) {
            body(
                h1("Hello, World!"),
                img().withSrc("/img/hello.png")
            ).render();
        }
    }
    33 (tạo một số nội dung của
    import static j2html.TagCreator.*;
    
    public class Main {
        public static void main(String[] args) {
            body(
                h1("Hello, World!"),
                img().withSrc("/img/hello.png")
            ).render();
        }
    }
    34)

Các lớp/giao diện đặc biệt khác trong J2HTML

  • Nhãn. java là lớp cơ sở cho mọi thẻ và mở rộng DomContent
  • Thẻ trống. java là lớp cơ sở cho tất cả các Thẻ không có nội dung
  • Thẻ chứa. java là lớp cơ sở cho tất cả các Thẻ có thể chứa các thẻ khác
  • DomContent. java

Việc tạo Mã cho các Giao diện cụ thể của Thuộc tính được tham số hóa như thế nào?

Các thuộc tính khác nhau về 'loại' của chúng. Một số trong số chúng có thể được đặt bằng số (được chuyển đổi thành chuỗi trong html). Những cái khác chỉ có thể được đặt hoặc không được đặt, những cái khác vẫn có 3 trạng thái. đặt, bỏ đặt và không có mặt. Để mô hình hóa các quyền thích hợp này, một Thuộc tính duy nhất có thể được mô tả bằng một phiên bản của AttrD. java

import static j2html.TagCreator.*;

public class Main {
    public static void main(String[] args) {
        body(
            h1("Hello, World!"),
            img().withSrc("/img/hello.png")
        ).render();
    }
}
35 chứa các Thuộc tính khác nhau, thuộc tính của chúng và Thẻ mà chúng có thể được đặt trên. Đây là điểm bắt đầu để thêm Thuộc tính mới và tùy chỉnh thuộc tính của chúng