【问题标题】:JSF2.1 - Using AJAX in selectoneradioJSF2.1 - 在 selectoneradio 中使用 AJAX
【发布时间】:2012-04-06 13:07:24
【问题描述】:

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

我创建了一个带有 selectoneradioxhtml 页面,我想使用 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);

  }
}

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

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

感谢和问候

【问题讨论】:

    标签: java ajax jsf-2 jboss7.x


    【解决方案1】:

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

    调用f:ajax 将导致在您指定的事件上调用控制器属性的设置器。如果您不指定任何事件,则将调用该类型 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>
    

    就是这样。

    【讨论】:

    • 我的控制器有一个 UIComponent 实例,因为它会动态呈现一个表单。感谢您的观察和回答罗德里戈
    猜你喜欢
    • 2015-01-02
    • 2012-10-24
    • 2013-01-11
    • 2015-05-04
    • 1970-01-01
    • 2012-11-24
    • 2014-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多