在编写符合 XML 的 JSP 时,很难根据输入生成不同的 HTML 标签(例如,在 <table>
中输出不同的标签时)。
标准解决方案是使用if
或choose
标签,但是在 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="<th>%" /></c:when>
<c:when test="${i.tag = 'td'}"><c:out value="<td>%" /></c:when>
</c:choose>
<!-- 100 lines of code -->
<c:choose>
<c:when test="${i.tag = 'th'}"><c:out value="</th>%" /></c:when>
<c:when test="${i.tag = 'td'}"><c:out value="</td>%" /></c:when>
</c:choose>
关于java - XSLT <xsl :element> equivalent in JSP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19403693/