JSF - Problema com selectOneRadio e ajax URGENTE!

5 respostas
igorbrites

Salve pessoal!

Seguinte, to desenvolvendo um aplicativo com JSF e preciso que, em um form, quando eu clico num radioButton, ele faça sumir uma div e aparecer outra, algo como o show/hide do jQuery. Já tô apanhando pra isso tem uma semana e não saio do lugar. o espaço dos radio buttons tá assim:

<a4j:region>
	<h:selectOneRadio required="true" value="#{ValidaPessoa.intMostra}">
		<f:selectItem itemValue="1" itemLabel="Pessoa física" />
		<f:selectItem itemValue="2" itemLabel="Pessoa jurídica" />
		<a4j:support event="onclick" immediate="false"
			reRender="formJuridica" action="#{ValidaPessoa.exibirDIV}"/>//primeira linha do erro (23)
	</h:selectOneRadio>
</a4j:region>

As div’s são assim:

<s:div id="formJuridica" rendered="#{ValidaPessoa.exibeDiv1}">
	<table width="800" border="1">
		<tr>
			<td><h:outputText value="#{msg.cEmpresa}" /></td>
			<td><h:inputText value="#{campos.empresa}" /></td>
			<td><h:outputText value="#{msg.cResp}" /></td>
			<td><h:inputText value="#{campos.resp}" /></td>
		</tr>
	</table>
	<table width="800" border="1">
		<tr>//segunda linha do erro (41)
			<td><h:outputText value="#{msg.cCnpj}" /></td>
			<td><h:inputText value="#{campos.cnpj}" /></td>
			<td><h:outputText value="#{msg.cEmail}" /></td>
			<td><h:inputText value="#{campos.email}" /></td>
		</tr>
	</table>
</s:div>

<s:div id="formFisica" rendered="#{ValidaPessoa.exibeDiv2}">
	<table width="800" border="1">
		<tr>
			<td><h:outputText value="#{msg.cNome}" /></td>
			<td><h:inputText value="#{campos.nome}" /></td>
		</tr>
	</table>
	<table width="800" border="1">
		<tr>
			<td><h:outputText value="#{msg.cCpf}" /></td>
			<td><h:inputText value="#{campos.cpf}" /></td>
			<td><h:outputText value="#{msg.cEmail}" /></td>
			<td><h:inputText value="#{campos.email}" /></td>
		</tr>
	</table>
</s:div>

Esse é o meu servlet:

public class ValidaPessoa{
	
	private int intMostra;
	private boolean exibeDiv1 = false;
	private boolean exibeDiv2 = true;
	
	//setters e getters
	public int getIntMostra() {
		return intMostra;
	}
	public void setIntMostra(int intMostra) {
		this.intMostra = intMostra;
	}
	public boolean isExibeDiv1() {
		return exibeDiv1;
	}
	public void setExibeDiv(boolean exibeDiv1) {
		this.exibeDiv1 = exibeDiv1;
	}
	public boolean isExibeDiv2() {
		return exibeDiv2;
	}
	public void setExibeDiv2(boolean exibeDiv2) {
		this.exibeDiv2 = exibeDiv2;
	}
	
	public void exibirDIV(){
		
		if(intMostra == 1){
			exibeDiv1 = false;
			exibeDiv2 = true;
		}else if(intMostra == 2){
			exibeDiv1 = true;
			exibeDiv2 = false;
		}
		
	}
	
}

E o erro q aparece é o seguinte:

org.apache.jasper.JasperException: /include/formCliente.jsp(23,41) #{..} is not allowed in template text
	org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:40)
	org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407)
	org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:102)
	org.apache.jasper.compiler.Validator$ValidateVisitor.visit(Validator.java:711)
	org.apache.jasper.compiler.Node$ELExpression.accept(Node.java:935)
	org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2336)
	org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2386)
	org.apache.jasper.compiler.Validator$ValidateVisitor.visit(Validator.java:838)
	org.apache.jasper.compiler.Node$CustomTag.accept(Node.java:1507)
	org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2336)
	org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2386)
	org.apache.jasper.compiler.Validator$ValidateVisitor.visit(Validator.java:838)
	org.apache.jasper.compiler.Node$CustomTag.accept(Node.java:1507)
	org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2336)
	org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2386)
	org.apache.jasper.compiler.Validator$ValidateVisitor.visit(Validator.java:838)
	org.apache.jasper.compiler.Node$CustomTag.accept(Node.java:1507)
	org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2336)
	org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2386)
	org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2392)
	org.apache.jasper.compiler.Node$Root.accept(Node.java:489)
	org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2336)
	org.apache.jasper.compiler.Validator.validate(Validator.java:1737)
	org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:178)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:306)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:286)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:273)
	org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:566)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:311)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:408)
	com.sun.faces.application.ViewHandlerImpl.executePageToBuildView(ViewHandlerImpl.java:442)
	com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:115)
	com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:106)
	com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
	com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144)
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:245)
	org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)

Tô começando com o JSF agora, então se alguem puder me dar uma força, agradeço demais!!!

Vlw galera!!!

5 Respostas

Marlon_Meneses

pode ser feito com javascript?

ftabah

Porque immediate=“false”?
e pq não tá inficando o formFisica também no reRender?
sinceramente, com javascrit, como o marlon falou, ia te poupar tempo e dor de cabeça…

igorbrites

Vlw pela ajuda pessoal, pricipalmente pela rapidez!

Bom, não sou mto bom com javascript, então se alguem puder me dar uma força nessa parte tbm…

E outra coisa ftabah, como eu posso declarar o formFisica no reRender? é só separar por vírgula ou colocar outro reRender? Eu uso o Red Hat Developer Studio e lá não deixou q eu colocasse outro reRender. E qto ao immediate=“false” foi uma ideia de um outro tópico daki do forum. Mas vou testar com true. Vou dar uma pesquisada em javascript, mas qqr ideia nova é bem vinda! rsrsrsrs

[Editado]E esse código javascript, pq não aceita jquery? Tentei fazer os eventos show/hide com o jquery e não deu. Não consigo recuperar o “checked” do radioButton.

Vlw pessoal!

ftabah

igorbrites:
Vlw pela ajuda pessoal, pricipalmente pela rapidez!

Bom, não sou mto bom com javascript, então se alguem puder me dar uma força nessa parte tbm…

E outra coisa ftabah, como eu posso declarar o formFisica no reRender? é só separar por vírgula ou colocar outro reRender? Eu uso o Red Hat Developer Studio e lá não deixou q eu colocasse outro reRender. E qto ao immediate=“false” foi uma ideia de um outro tópico daki do forum. Mas vou testar com true. Vou dar uma pesquisada em javascript, mas qqr ideia nova é bem vinda! rsrsrsrs

[Editado]E esse código javascript, pq não aceita jquery? Tentei fazer os eventos show/hide com o jquery e não deu. Não consigo recuperar o “checked” do radioButton.

Vlw pessoal!

para dois componentes num mesmo reRender basta colocar um espeço em branco, ex: “form1 form2”

Agora, exemplo bobo pra ocultar/mostrar elemento usando javascript

<a href="javascript:;" onmousedown="
	document.getElementById('form1').style.display = 'none';
	document.getElementById('form2').style.display = 'block';">trocar form para 2</a>
<br/>
<a href="javascript:;" onmousedown="
	document.getElementById('form1').style.display = 'block';
	document.getElementById('form2').style.display = 'none';">trocar form para 1</a>
fabio.massa

o ACTION exige um método que retorne alguma string e o seu método não retorna nada, sugiro utilizar um actionListener que não retorna nada também, mas deve assinar o actionEvent ± assim:

public void exibirDIV(ActionEvent event) {
...
}
Criado 8 de maio de 2009
Ultima resposta 11 de mai. de 2009
Respostas 5
Participantes 4