0

我的 xhtml 中有 ap:commandLink,其值在“显示”/“隐藏”之间切换。有什么方法可以从支持 bean 中获取这个 commandlink 的值吗?我的意思是,我想知道命令链接当前显示的值,即显示/隐藏?

4

2 回答 2

1

就这一点而言,调用组件仅在ActionEvent参数中可用:

<h:commandLink id="show" value="Show it" actionListener="#{bean.toggle}" />
<h:commandLink id="hide" value="Hide it" actionListener="#{bean.toggle}" />

public void toggle(ActionEvent event) {
    UIComponent component = event.getComponent();
    String value = (String) component.getAttributes().get("value");
    // ...
}

然而,这是一个糟糕的设计。可本地化的文本绝对不应用作业务逻辑的一部分。

相反,要么挂钩组件 ID:

String id = (String) component.getId();

传递方法参数(需要 EL 2.2 或 JBoss EL):

<h:commandLink id="show" value="Show it" actionListener="#{bean.toggle(true)}" />
<h:commandLink id="hide" value="Hide it" actionListener="#{bean.toggle(false)}" />

public void toggle(boolean show) {
    this.show = show;
}

甚至直接调用 setter 方法而不需要额外的动作监听器方法:

<h:commandLink id="show" value="Show it" actionListener="#{bean.setShow(true)}" />
<h:commandLink id="hide" value="Hide it" actionListener="#{bean.setShow(false)}" />
于 2013-08-04T12:53:18.510 回答
0

正如@BalusC 建议的那样,您的方法不是一个好的解决方案。但如果您真的想这样做,您可以将组件 ( p:commandLink) 绑定到您的 backingbean,如在 JSF 中使用绑定属性的优势是什么?. 绑定组件后,您可以valuep:commandLink.

于 2013-08-03T21:05:33.340 回答