JSF2.1 - 在selectoneradio中使用AJAX

时间:2012-03-21 23:31:12

标签: java ajax jsf-2 jboss7.x

我正在尝试在我的项目中发出ajax请求,但我没有成功。

我创建了一个带有 selectoneradio xhtml 页面,我想使用AJAX来呈现 panelgrid

<h:selectOneRadio id="tcliente" value="#{clienteMB.tipoCliente}">
  <f:ajax execute="@form" render="sessaoDados" listener=#{cadastroClienteRendererMB.testar}" />
  <f:selectItems value="#{clienteMB.itemValuesTipoCliente}" />
</h:selectOneRadio>

我的被管理员:

@ManagedBean<br>
@ViewScoped<br>
public class CadastroClienteRendererMB implements Serializable {<br>
...
public void testar() {

    System.out.println("teste");

    if (panel == null)
        panel = new HtmlPanelGrid();

    HtmlOutputText text = new HtmlOutputText();

    text.setValue("teste");

    panel.getChildren().add(text);

  }
}

我用Google搜索了这个问题,但我所遵循的所有答案都没有解决这个问题。我咨询的最后一个问题是: valueChangeListener is not getting called from <h:selectOneRadio> which is placed in side a <h:panelGrid>

对不起,请第一次使用这个论坛,我需要一些帮助或指导。

谢谢和问候

1 个答案:

答案 0 :(得分:3)

严格回答您的问题,您不需要像在代码中一样在控制器中创建UIComponent实例以使ajax工作。

调用f:ajax将导致在您指定的事件中调用控制器属性的setter。如果未指定任何事件,则将调用该类UIComponent的默认事件。对于h:selectOneRadio,它是valueChange事件。

无论如何,您需要为f:selectItems提供正确的项目值。如果要设置的属性是字符串,则项值应为字符串。如果属性是您定义的自定义类型,则应创建转换器以相应地转换值。

在此测试中,我们设置的值是一个字符串,因此我们不需要转换器。

我为您创建了一个小型测试应用程序:

控制器



    @ManagedBean
    @ViewScoped
    public class TestController implements Serializable
    {
        private static final long serialVersionUID = 1L;

        private String teste;

        public String getTeste()
        {
            return teste;
        }

        public void setTeste(String teste)
        {
            this.teste = teste;
        }
    }


<h:form>

    <h:panelGrid id="meuGrid" columns="2">

        <h:outputText value="Servidor" />
        <h:selectOneRadio id="teste" value="#{testController.teste}">
            <f:selectItem itemLabel="JBoss AS7" itemValue="AS7" />
            <f:selectItem itemLabel="GlassFish" itemValue="GF3" />
            <f:ajax execute="@this" render="resultado" />
        </h:selectOneRadio>

        <h:outputText value="Selecionado" />
        <h:outputText id="resultado" value="#{testController.teste}" />

    </h:panelGrid>

</h:form>

那就是它。