如何有条件地在HTML元素中封装某些内容
在使用JSF、JSTL和Trinidad创建的页面上,我使用许多属性调用了一些标记如何有条件地在HTML元素中封装某些内容,html,jsf,jstl,trinidad,conditional-rendering,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}" shortDes
<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')}"/>
我想在
元素中显示它,或者直接、有条件地显示它。现在我这样做:
<c:when test="#{not horizontal}">
<tr>
<td>
<tr....>
</td>
</tr>
</c:when>
<c:when test="#{horizontal}">
<tr...>
</c:when>
这样,我重复同一段代码两次,这显然是不好的。我能做什么
总之,为tr创建一个新的自定义组件是没有用的。。。打电话——打电话也会有同样的问题
也许,我可以有条件地将一个标签封装在另一个标签中?我可以吗
另一种方式可能是这样的:把tr。。。标记某种类型的变量,并在使用此变量构造时使用相同的变量。也许,这是可能的
您知道如何避免这种代码重复的另一种方法吗?如果您使用的是传统JSP,请将其包装在
中
<h:outputText value="<tr><td>" escape="false" rendered="#{not horizontal}" />
<tr:selectBooleanRadio ... />
<h:outputText value="</td></tr>" escape="false" rendered="#{not horizontal}" />
如果您使用的是JSPX或Facelets,这将在上述构造上产生XML错误,这在XML中是非法的,请在
中对其进行转义
<h:outputText value="<tr><td>" escape="false" rendered="#{not horizontal}" />
<tr:selectBooleanRadio ... />
<h:outputText value="</td></tr>" escape="false" rendered="#{not horizontal}" />
最后我需要声明xmlns:h=”“。看起来很脏。第一种变体更具同情心,请问我对f:有什么看法?正如我所回答的,它在Facelets中不起作用。顺便说一句,它只是标准的核心标记,自JSF 2.0以来才被弃用。我已经检查过:-(。还有其他更干净的解决方案吗?像条件下的元素中的信封?它违反了XML规则(文档必须格式正确)唯一干净的替代品是带有渲染器的自定义组件。但这违反了更基本的不复制规则。