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