Jsf 2 valueChangeListener未从调用<;h:selectOneRadio>;放置在a侧<;h:panelGrid>;

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 { // ... }

我面临h:selectOneRadio的valueChangeListener=“#{user.loadYesNo}”的问题 (我在Tomcat-7上使用Mojarra 2-0-8)。 如果我删除了包含“h:selectOneRadio”的两个panelGrid,则会触发值change litener

视图:


您需要将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>