java - XSLT <xsl :element> equivalent in JSP?

标签 java jsp

在编写符合 XML 的 JSP 时,很难根据输入生成不同的 HTML 标签(例如,在 <table> 中输出不同的标签时)。

标准解决方案是使用ifchoose标签,但是在 HTML 标签内共享代码就成了一个问题。例如

<c:choose>
 <c:when test="${i.tag = 'th'}><th> <!-- 100 lines of code --> </th></c:when>
 <c:when test="${i.tag = 'td'}><td> <!-- 100 lines of code duplicated?! --> </td></c:when>
</c:choose>

XSLT 提供 <xsl:element>标签,它允许您使用标准 XML 语法构建标签及其属性。 JSP中的标签库里有这样的标签吗?

最佳答案

你不应该这样做吗?

<c:choose>
 <c:when test="${i.tag = 'th'}"><th></c:when>
 <c:when test="${i.tag = 'td'}"><td></c:when>
</c:choose>
 <!-- 100 lines of code --> 
<c:choose>
 <c:when test="${i.tag = 'th'}"></th></c:when>
 <c:when test="${i.tag = 'td'}"></td></c:when>
</c:choose>

<小时/> 如果您希望标记是有效的 XML;使用自定义标签来包装您想要避免重复的所有 Java 代码。您的标记将类似于

<c:choose>
 <c:when test="${i.tag = 'th'}">
  <th>
   <my:customTag anyAttributes="th-related-values-if-any" ... />
  </th>
 </c:when>
 <c:when test="${i.tag = 'td'}">
  <td>
   <my:customTag anyAttributes="td-related-values-if-any" ... />
  </td>
 </c:when>
</c:choose>

<小时/> 或者,可以使用以下 hack(由 @Uooo 建议)来传递 XML validator 。

<c:choose>
 <c:when test="${i.tag = 'th'}"><c:out value="&lt;th&gt%" /></c:when>
 <c:when test="${i.tag = 'td'}"><c:out value="&lt;td&gt%" /></c:when>
</c:choose>
 <!-- 100 lines of code --> 
<c:choose>
 <c:when test="${i.tag = 'th'}"><c:out value="&lt;/th&gt%" /></c:when>
 <c:when test="${i.tag = 'td'}"><c:out value="&lt;/td&gt%" /></c:when>
</c:choose>

关于java - XSLT <xsl :element> equivalent in JSP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19403693/

相关文章:

java - 如何从 Liferay-Portal、服务器的 http 响应字段中删除 http header ?

java - 浏览器上的后退按钮不会将控制流发送到 API

java - println使用什么机制?

java - 抛出 BadRequestException(ResponseEntity) 与捕获错误,返回 ResponseEntity(HTTPStatus.BadRequest) ReST API

JSP 表达式语言错误行为?

java - HTTP 状态 404 : The requested resource is not available

xml - JSP 与 Facelets 作为 JSF 的 View 技术

java - 如何使用虚拟目的地创建多个 activemq 主题订阅者实例?

java - a4j :commandButton always executes form even when execute id's given

java - 从 JSF 1.2 迁移到 2.0 的问题