如何有条件地在HTML元素中包含某些内容

时间:2016-01-13 12:41:04

标签: html jsf jstl trinidad conditional-rendering

在使用JSF,JSTL和Trinidad创建的页面上,我有一些带有许多属性的标签。

<tr:selectBooleanRadio
        group="#{groupId}"
        id="#{groupId}_#{Id}_radio"
        selected="#{value.yesterday}"
        text="#{msg.ib_selectTimeIntervalRadio_yesterday_label}"
        shortDesc="#{ib:fn_coalesce(title,label)}"
        simple="#{ib:fn_coalesce(simple,true)}"
        styleClass="#{ib:fn_coalesce(styleClass,'selectTimeIntervalRadio')}"/>

我希望在<td>元素中或直接,有条件地显示它。现在我这样做:

<c:when test="#{not horizontal}">
    <tr>
        <td>
            <tr....>
        </td>
    </tr>
</c:when>
<c:when test="#{horizontal}">
    <tr...>
</c:when>

这样我两次重复同一段代码,这显然很糟糕。我该怎么办?

恕我直言,为tr创建一个新的自定义组件是没用的...调用它会产生同样的问题。

也许,我可以有条件地将另一个标签封装在另一个标签中吗?我可以吗?

另一种方式可能是这样:将tr ...标记放在某种变量中,并在构造此变量时使用相同的变量。也许,有可能吗?

您是否知道如何逃避此代码重复?

1 个答案:

答案 0 :(得分:2)

如果您使用的是旧版JSP,请将其打包在<f:verbatim>

<f:verbatim rendered="#{not horizontal}"><tr><td></f:verbatim>
    <tr:selectBooleanRadio ... />
<f:verbatim rendered="#{not horizontal}"></td></tr></f:verbatim>

如果您正在使用JSPX或Facelets,这会在上述构造中产生XML错误,这在XML中是非法的,请在<h:outputText escape="false">中将其转义。

<h:outputText value="&lt;tr&gt;&lt;td&gt;" escape="false" rendered="#{not horizontal}" />
    <tr:selectBooleanRadio ... />
<h:outputText value="&lt;/td&gt;&lt;/tr&gt;" escape="false" rendered="#{not horizontal}" />