Jsf 2 valueChangeListener未从调用<;h:selectOneRadio>;放置在a侧<;h:panelGrid>;
我面临h:selectOneRadio的valueChangeListener=“#{user.loadYesNo}”的问题 (我在Tomcat-7上使用Mojarra 2-0-8)。 如果我删除了包含“h:selectOneRadio”的两个panelGrid,则会触发值change litener 视图:Jsf 2 valueChangeListener未从调用<;h:selectOneRadio>;放置在a侧<;h:panelGrid>;,jsf-2,Jsf 2,我面临h:selectOneRadio的valueChangeListener=“#{user.loadYesNo}”的问题 (我在Tomcat-7上使用Mojarra 2-0-8)。 如果我删除了包含“h:selectOneRadio”的两个panelGrid,则会触发值change litener 视图: 您需要将bean放在视图范围中,以便为后续请求保留呈现的属性的基本条件 @ManagedBean @ViewScoped public class User { // ... }
您需要将bean放在视图范围中,以便为后续请求保留
呈现的
属性的基本条件
@ManagedBean
@ViewScoped
public class User {
// ...
}
与具体问题无关,
valueChangeListener
用于在服务器端值更改事件上挂起钩子的任何时候,该钩子允许您同时拥有旧值和新值。例如,记录一个事件。它不打算基于变更执行业务操作。为此,您应该使用
的侦听器属性
那么,替换
<h:selectOneRadio id="yesNoRadio" value ="#{user.yesNoRadio}" valueChangeListener="#{user.loadYesNo}">
<f:selectItem itemValue="1" itemLabel="YES"></f:selectItem>
<f:selectItem itemValue="0" itemLabel="NO"></f:selectItem>
<f:ajax event="change" execute="@form" render="userDetailsGrid "></f:ajax>
</h:selectOneRadio>
与
并从方法中删除valuechangevent
属性。Thx BalusC用于快速响应…但它不起作用。正如我在前面提到的,如果我移除包含rdaio按钮的panelGrid,它就会工作。对不起,我忽略了这一点。bean需要放在视图范围内。我已经更新了答案。谢谢你,巴卢斯克——只需将@ViewScoped添加到managedBean中就行了。但是,如果使用,我将得到以下错误——由以下原因引起:javax.el.MethodNotFoundException:/Start.xhtml Listener=“#{user.loadYesNo}”:找不到方法:com.jsf.test。User@68bac49a.loadYesNo(javax.faces.event.AjaxBehaviorEvent)——如前所述,“并从方法中删除ValueChangeEvent
属性。”
@ManagedBean
@ViewScoped
public class User {
// ...
}
<h:selectOneRadio id="yesNoRadio" value ="#{user.yesNoRadio}" valueChangeListener="#{user.loadYesNo}">
<f:selectItem itemValue="1" itemLabel="YES"></f:selectItem>
<f:selectItem itemValue="0" itemLabel="NO"></f:selectItem>
<f:ajax event="change" execute="@form" render="userDetailsGrid "></f:ajax>
</h:selectOneRadio>
<h:selectOneRadio id="yesNoRadio" value ="#{user.yesNoRadio}">
<f:selectItem itemValue="1" itemLabel="YES"></f:selectItem>
<f:selectItem itemValue="0" itemLabel="NO"></f:selectItem>
<f:ajax execute="@form" listener="#{user.loadYesNo}" render="userDetailsGrid"></f:ajax>
</h:selectOneRadio>