2

我有一个表示表格的复合组件,根据editable属性(我创建的)可能会或可能不会显示编辑行的链接。

编辑链接是类型的<h:commandLink>,并且actionListeners 指向支持 bean 中的方法。当我希望表格可编辑时,用于处理编辑的支持 bean 作为<cc:attribute name="editBean"... />属性提供。editable

如果我不需要表格可编辑,我将editable属性设置为,false并且链接rendered属性也设置为 false。

我的问题是,如果我设置editablefalse,因此也不设置属性editBean,我会得到错误,指出没有处理编辑的方法(例如 java.lang.String 没有属性 xxxxx)。

我曾希望,由于链接设置为根本不呈现,因此在 action/actionListener 中指定的内容将被忽略。对我来说,首先检查rendered属性然后,如果它设置为true,检查其他属性是合乎逻辑的。

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

4

1 回答 1

2

使用 JSTL<c:if>有条件地在 JSF 组件树中构建组件,而不是使用rendered属性来有条件地呈现 HTML 输出(这是您使用的是 JSF 2.2,否则我会明确提到这需要至少 Mojarra 2.1.18 以避免损坏查看状态)。

<c:if test="#{cc.attrs.editable}">
    <h:commandLink ... />
</c:if>
于 2013-09-19T12:31:10.813 回答