2

我已经使用BalusC 的模板开始了我自己的自定义标记处理程序(纯 XHTML,没有 Renderer),我们称之为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属性添加到组件本身可以解决此问题。

4

1 回答 1

1

为标签文件添加对rendered属性的支持并将其重新应用于标签文件的内容。

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

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

这可能是丑陋的,但是的,这是一种方式。

于 2013-07-04T15:16:06.220 回答