html - 如何在 JSP 中将对象呈现为 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 中,我可以这样做以将我的对象呈现到表中:
${myObject.render}
我简化了案例,但在更复杂的情况下,我需要在 JSP 中添加一些业务逻辑,这是一个好方法吗?
解决方案
这样不好。DTO 是一个数据对象,它应该只包含数据。要渲染 html 表格,您应该使用 JSP 标记,如果您想在渲染文档时创建表格,则应使用 javascript。
${myObject.render}
JSP 中的 EL 输出很危险,因为它不会转义 XSS 符号。在 Struts2 中,所有 UI 标记都会转义 HTML 文本。您应该使用它们来呈现应该转义的文本。
推荐阅读
- java - 我可以在将 Object 与另一个数组进行比较时更改它的一个值吗?
- java - 如何在 RecyclerView Android 中自定义 ItemTouchHelper
- r - 来自 googleAuthR 包的反应式表达式中的 curl 错误:收到了意外的 TLS 数据包
- javascript - 如何使用 js 或 jquery 以编程方式按下任何键盘键?
- php - 我想为显示的每个项目创建一个增量编号
- regex - 正则表达式匹配字符串#substring
- rocket-chip - 你能合成RSICV火箭芯片测试工具模块吗?
- rabbitmq - Masstransit:PublishFault context.Message 在无法访问代理时为空
- flutter - 如何在 Flutter 中使用 StreamBuilder 连接到等待状态
- reactjs - this.props.history.push 在 React-Router 中未定义