JSF: Dúvida na utilização do componente "Support" do A4j [RESOLVIDO]

5 respostas
felipempantoja

Olá pessoal.

Estou com um formulário aqui que funciona da seguinte forma:
O primeiro campo é um combobox, que quando é selecionado um item, eu vou no meu managed bean e através do value do combobox, faço uma consulta no banco, e retorno os valos de todos os campos do form.

beleza, até aí tudo bem, porém, eu preciso que esses campos sejam preenchidos antes de submeter o form, mas quando eu uso o atributo required=“true” em algum componente do form, e vou selecionar o item no combobox, ele nem vai no managed bean, meio estranho né? :smiley:

Vou mostrar +ou- como tô fazendo:

<h:form id="formDocumento"> <table> <tr style="border-color: #EDEADD"> <td>Documento:</td> <td> <h:selectOneMenu id="documento" binding="#{documentoMB.documento}"> <a4j:support actionListener="#{documentoMB.carregarDocumentoAction}" event="onchange" reRender="formDocumento"/> <f:selectItem itemLabel="- Selecione -"/> <f:selectItems value="#{auxiliarMB.listaDeDocumentosPendentesPorEmitente}"/> </h:selectOneMenu> </td> </tr> <tr> <td>Contato:</td> <td> <h:inputText id="contato" binding="#{documentoMB.contato}" required="true" requiredMessage=" Preencha este campo!"/> <rich:message for="contato"> <f:facet name="errorMarker"><h:graphicImage value="/_img/stop.png"/></f:facet> </rich:message> </td> </tr> </table> <h:commandButton actionListener="#{documentoMB.salvarDocumentoAction}" value="Salvar"/> </h:form>

Então, quando eu selecionasse um item do combo, o campo “contato” deveria ser carregado mas não foi, exceto quando eu tiro o atributo required=true do campo contato.

Alguém pode me dar uma luz? :smiley:
Agradeço desde já! :smiley:

5 Respostas

felipempantoja

Alguém? =/

felipempantoja

Minha explicação está ruim?
Ninguém faz nem idéia do motivo disto estar acontecendo?

Eu acho que é pq quando eu seleciono o item do combo, e ativo o “support”, é como se eu tivesse dado um submit no form, e os messages dos campos disparam, eu só queria que a aplicação entendesse que essa ação do combo é uma ação a parte e não pra submeter o form…

Agradeço quem puder tentar ajudar :smiley:

felipempantoja

Pra quem estiver com o mesmo problema, a solução que consegui foi esta:

<h:form>
	<table>
		<tr style="border-color: #EDEADD">
			<td>Documento:</td>
			<td>
				<h:selectOneMenu id="documento" binding="#{documentoMB.documento}">
					<a4j:support actionListener="#{documentoMB.carregarDocumentoAction}" event="onchange" reRender="formDocumento"/>
					<f:selectItem itemLabel="- Selecione -"/>
					<f:selectItems value="#{auxiliarMB.listaDeDocumentosPendentesPorEmitente}"/>
				</h:selectOneMenu>
			</td>
		</tr>
	</table>
</h:form>

<h:form id="formDocumento">
	<table>
		<tr>
			<td>Contato:</td>
			<td>
				<h:inputText id="contato" binding="#{documentoMB.contato}" required="true" requiredMessage=" Preencha este campo!"/> 
				<rich:message for="contato">
					<f:facet name="errorMarker"><h:graphicImage value="/_img/stop.png"/></f:facet>
				</rich:message>
			</td>
		</tr>
	</table>
	<h:commandButton actionListener="#{documentoMB.salvarDocumentoAction}" value="Salvar"/>
</h:form>

O que fiz foi tirar o combo do form onde estão todos os outros campos, e deixá-lo com um form próprio, aí ele submete sim, o form dele, e re-renderiza o form de baixo onde estão os outros campos, bem óbvio né...

pura falta de atenção... :D

analyser

Cara nem precisava fazer tudo isso que vc fez, era só colocar o atributo ajaxSingle=“true” que ele submete apenas a combo e nao o form, mais simples ainda

felipempantoja

Po amigão vou fazer um teste lá, acabei deixando daquele jeito mesmo aquele formulário que mostrei, mas do jeito que vc está falando é bemm melhor! :smiley:
valeu pela ajuda! :smiley:

Abração!

Criado 25 de junho de 2008
Ultima resposta 5 de out. de 2008
Respostas 5
Participantes 2