如何从支持bean获取命令链接值(显示名称)?

时间:2013-08-02 14:45:46

标签: jsf-2 primefaces

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

2 个答案:

答案 0 :(得分: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 or JBoss EL required):

<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)}" />

答案 1 :(得分:0)

正如@BalusC建议的那样,你的方法并不是一个好的解决方案。但是如果你真的想这样做,你可以将组件(p:commandLink)绑定到你的backbean,如What is the advantages of using binding attribute in JSF?中所示。 绑定组件后,您可以从value

访问p:commandLink属性