我可以让JSF2跳过渲染我的自定义标签而不修改标签本身吗?

时间:2013-07-04 14:58:06

标签: jsf-2 custom-tags

我使用BalusC's template创建了自己的自定义标记处理程序(纯XHTML,没有渲染器),我们称之为bean:input - 典型的标签,输入,消息三重奏。它的使用方式如下:

<h:panelGrid columns="3">
   <bean:input label="input1:" bean="#{bean1}" property="name" />
   <bean:input label="input2:" bean="#{bean2}" property="name" />
   <bean:input label="input3:" bean="#{bean3}" property="name" />
</h:panelGrid>

麻烦的是,输入是互斥的(即,只应出现其中一个)。显示哪个输入是在视图参数的渲染时确定的。我该怎么做?

我无法使用<ui:fragment>,因为这会弄乱panelGrid,指定标记上的rendered="false"没有效果,我有点犹豫将我的标记实现包装成一个大的<c:if test="#{rendered}"> - 有没有更好/内置的方式来告诉JSF它应该只是跳过呈现这个特定的标签?


注意:当我使用部分更新重新渲染网格时,<c:if>标记会做有趣的事情(比如渲染不应渲染的标签,但不会渲染相应的输入框)。将rendered属性添加到组件本身会修复该问题。

1 个答案:

答案 0 :(得分:1)

rendered属性的支持添加到标记文件中,并将其重新应用于标记文件的内容。

<bean:input label="input1:" bean="#{bean1}" property="name" rendered="..." />

  

我有点犹豫将我的代码实现包装在一个大<c:if test="#{rendered}">

这可能很难看,但是这是一种方式。