我有一个表示表的复合组件,根据editable
属性(我创建的)可能会显示或不显示编辑行的链接。
编辑链接的类型为<h:commandLink>
,并且actionListener
指向支持bean中的方法。当我希望表格可编辑时,用于处理编辑的辅助bean以属性<cc:attribute name="editBean"... />
的{{1}}提供。
如果我不希望表格可编辑,我会将editable
属性设置为editable
,并且链接false
属性也会设置为false。
我的问题是,如果我将rendered
设置为editable
,因此也不设置属性false
,我会收到错误,指出没有处理方法编辑(例如java.lang.String没有属性xxxxx)。
我曾希望,由于链接设置为根本不会呈现,因此将忽略action / actionListener中指定的内容。对我来说,首先检查editBean
属性然后,如果它设置为rendered
,检查其他属性是合乎逻辑的。
所以,我的问题是:为什么它会像这样工作,是否有一种处理这种情况的优雅方式?
答案 0 :(得分:2)
使用JSTL <c:if>
有条件地在JSF组件树中构建组件而不是rendered
属性来有条件地呈现HTML输出(这是你使用JSF 2.2,否则我已经明确提到这需要最少的Mojarra 2.1.18以避免破坏视图状态。)
<c:if test="#{cc.attrs.editable}">
<h:commandLink ... />
</c:if>