我尝试按菜单项设置普通属性,但它不起作用。
JSF:
<p:menuitem value="Names"
url="/master.xhtml"
action="#{navigation.name}">
<f:setPropertyActionListener target="navigation.name"
value="Billy" />
</p:menuitem>
ManagedBean:
@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” value =“欺负”。如何通过menuItem设置属性值
由于
答案 0 :(得分:0)
在setPropertyActionListener
中,您有String
而不是EL表达式。变化
target="navigation.name"
到
target="#{navigation.name}"
另外,您需要仔细查看p:menuitem
action
。属性MethodNotFoundException
期待一个方法表达式。您将获得action="#{navigation.name}"
代码的设置方式。你需要改变
action="#{navigation.getName}"
到
#{navigation.name}
缩写语法url
用于值表达式。
您正在混合导航方法。对于相同的action
,您不能将p:menuItem
和action
属性放在一起。当我测试您的代码时,setPropertyActionListener
和url
在url="/master.xhtml"
出现时从未被调用过。此行为表明您必须选择其中一个。
<强> COMMENT 强>
根据您的样本,我认为您应该重新考虑您的方法。让我们假装你决定不使用#{navigation.name}
并让我们回顾一系列事件。按下菜单项后,setPropertyActionListener
中的name
表达式将首先将值“Billy”设置为navigation.setName("Billy")
属性(例如#{navigation.getName}
)。然后,属性action
中的表达式getName()
将调用String
。现在,操作将具有Billy.xhtml
值“Billy”,它将尝试导航到faces-config
(假设faces-config
中没有导航规则,并且您拥有JSF 2.0)。如果这是您正在追求的行为,或者您在{{1}}中设置了规则,并且您没有完全根据另一个故事对该值进行硬编码。请记住这一点。