如何在 JSP 中将对象渲染为 HTML

How to render object as HTML in JSP

我对在我的应用程序中呈现对象有疑问。

假设我有一个对象需要在应用程序的不同位置显示,但始终使用相同的模板。

如果我这样做:


import java.math.BigDecimal;
import java.util.Arrays;
import java.util.List;

import static org.apache.commons.lang.StringEscapeUtils.escapeHtml;

public class RegulDeclarationPersoDTO {

    private static final List<String> TYPES_RETRAIT = Arrays.asList(
            "TYPE_REGUL#1",
            "TYPE_REGUL#2",
            "TYPE_REGUL_AC#3",
            "TYPE_REGUL_AC#4",
            "TYPE_REGUL_AC#5");

    private static final String BG_COLOR_RETRAIT = "#FF6347";
    private static final String BG_COLOR_DEPASSSEMENT = "#FFB431";

    private Integer id;
    private BigDecimal horaire;
    private BigDecimal horaireReel;
    private Integer declId;
    private String commentaire;
    private Integer histoId;
    private ValeursDTO declaration;
    private String type;
    private String render;

    public String getRender() {
        render = String.format(
                "<tr>" +
                "<td><i class='fa fa-circle' style='color: %s'></i></td>" +
                "<td style='text-align: center'> %s h </td>" +
                "<td style='text-align: center'> %s h </td>" +
                "<td style='text-align: right'> %s </td>" +
                "</tr>",
                TYPES_RETRAIT.contains(type) ? BG_COLOR_RETRAIT : BG_COLOR_DEPASSSEMENT,
                horaire.stripTrailingZeros(),
                horaire.stripTrailingZeros(),
                escapeHtml(commentaire)
        );
        return render;
    }
}

从我的 JSP 我可以这样做来将我的对象渲染到 table:

${myObject.render}

我简化了案例,但在更复杂的案例中,我需要在 JSP 中添加一些业务逻辑,这是一个好方法吗?

不太好。 DTO 是一个数据对象,应该只包含数据。要呈现 html table,您应该使用 JSP 标签,或者如果您想在呈现文档时创建 table,则应使用 javascript。

${myObject.render}

JSP 中的 EL 输出是危险的,因为它不会转义 XSS 符号。在 Struts2 中,所有 UI 标签转义 HTML 文本。您应该使用它们来仅呈现应该转义的文本。