Java JSF2.1-在selectoneradio中使用AJAX
我试图在我的项目中提出ajax请求,但没有成功 我已经创建了一个带有selectoneradio的xhtml页面,我想使用AJAX来呈现panelgridJava JSF2.1-在selectoneradio中使用AJAX,java,ajax,jsf-2,jboss7.x,Java,Ajax,Jsf 2,Jboss7.x,我试图在我的项目中提出ajax请求,但没有成功 我已经创建了一个带有selectoneradio的xhtml页面,我想使用AJAX来呈现panelgrid 严格地回答您的问题,您不需要像在代码中那样在控制器中创建UIComponent实例来让ajax工作 调用f:ajax将导致在指定的事件上调用控制器属性的setter。如果未指定任何事件,将调用该类UIComponent的默认事件。对于h:selectOneRadio这是valueChange事件 无论如何,您需要为f:selectItems
严格地回答您的问题,您不需要像在代码中那样在控制器中创建UIComponent实例来让ajax工作
调用f:ajax
将导致在指定的事件上调用控制器属性的setter。如果未指定任何事件,将调用该类UIComponent的默认事件。对于h:selectOneRadio
这是valueChange
事件
无论如何,您需要为f:selectItems
提供正确的项目值。如果要设置的属性为字符串,则项值应为字符串。如果属性是已定义的自定义类型,则应创建转换器,以便相应地转换值
在这个测试中,我们设置的值是一个字符串,因此不需要转换器
我为您创建了一个小型测试应用程序:
控制器
页面
就是这样。我的控制器有一个UIComponent实例,因为它将动态呈现表单。感谢您的观察和回答罗德里戈
<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);
}
}
@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>