问题描述
假设我有一个对象,该对象需要在应用程序的不同位置显示,但始终使用相同的模板。
如果我做这样的事情:
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文本。您应该使用它们来呈现仅应转义的文本。