1

我尝试通过菜单项设置正常属性,但它不起作用。

jsf:

<p:menuitem value="Names" 
            url="/master.xhtml"
        action="#{navigation.name}">

       <f:setPropertyActionListener target="navigation.name"
      value="Billy" />
</p:menuitem>

托管豆:

@ManagedBean(name="navigation") 
@SessionScoped //
public class LinksNavigation {

    public LinksNavigation() {
        super();
        this.milchFleisch = "./menuFleisch.xhtml";
    }

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name= name;
    }

}

但它不起作用。我没有设置“f:setPropertyActionListener”值=“Bully”。如何通过 menuItem 设置属性值?

谢谢

4

1 回答 1

0

setPropertyActionListener你有一个String而不是一个 EL 表达式。改变

target="navigation.name"

target="#{navigation.name}"

此外,您需要仔细查看p:menuitem. 该属性action需要一个方法表达式。您将了解MethodNotFoundException您的代码设置方式。你需要改变

action="#{navigation.name}"

action="#{navigation.getName}"

缩写语法#{navigation.name}用于值表达式

您正在混合导航方法。你不能拥有相同的属性urlaction在一起p:menuItem。当我测试您的代码action并且在出现setPropertyActionListener时从未被调用时url。这种行为表明您必须选择其中一个。

评论

根据您的样本,我认为您应该重新考虑您的方法。让我们假装你决定不使用url="/master.xhtml",让我们回顾一下事件的顺序。按下菜单项后,表达式#{navigation.name}中的表达式setPropertyActionListener将首先将值“Billy”设置为您的name属性(例如navigation.setName("Billy"))。#{navigation.getName}然后属性中的表达式action将调用getName(). 现在 action 将具有String值“Billy”,它将尝试导航到Billy.xhtml(假设没有导航规则faces-config并且您拥有 JSF 2.0)。如果这是您所追求的行为,或者您已经设置了规则faces-config并且您没有对值进行硬编码,那么这完全是另一回事。请记住这一点。

于 2013-07-03T00:45:34.313 回答