如何在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(),escapeHtml(commentaire)
        );
        return render;
    }
}

在我的jsp中,我可以执行以下操作以将对象呈现到表中:

${myObject.render}

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

解决方法

不好。 DTO是仅应包含数据的数据对象。要呈现html表,应使用JSP标记,如果要在呈现文档时创建表,则应使用javascript。

$.ajax({
    type: 'POST',url: '/longtask',data {
    bigID = '0';
}
});

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