即使render = false,也会检查Action / ActionListener方法

时间:2013-09-19 10:33:24

标签: jsf actionlistener composite-component jsf-2.2 rendered-attribute

我有一个表示表的复合组件,根据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,检查其他属性是合乎逻辑的。

所以,我的问题是:为什么它会像这样工作,是否有一种处理这种情况的优雅方式?

1 个答案:

答案 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>