[Resolvido] Campo renderizado uma vez false, sempre false

4 respostas
E

Gente…

Estou deparando com algo que para muitos pode parecer muito trivial.

Tenho um combo com uma lista de tipo de contato: E-mail, Telefone Residencial, Celular, etc.

Para cada tipo selecionado é renderizado um campo com as suas respectivas validações e sempre sentando numa mesma variável String descricaoContato.

Ou seja, o usuário pode adicionar um tipo de contato por vez.

Qual problema ?

Bem, estou usando rendered para eles. Assim, logo a pagina é exibida, todos estão escondidos. Acontece que, ao selecionar um tipo de contato, o campo respectivo aparece, porém, o valor que insiro não é submetido. A variável permanece como null.

Até hoje, pensava que uma vez que faço um render num campo inicialmente rendered = false e ele é apresentado, eu poderia inserir um valor porque ao ser submetido, com certeza o valor também seria. Mas, não é isso que está acontecendo.

<h:form id="edicao-contato">
					<t:saveState value="#{empregadoBean.contato}"/>
						<p:fieldset legend="#{titulo.novoContato}" styleClass="fdset-contato">
							<h:panelGrid columns="4">
								<h:outputLabel value="Tipo Contato:*" styleClass="label" />
								<h:selectOneMenu label="Contato"
									value="#{empregadoBean.contato.deTipoContato}" required="true"
									tabindex="6">
									<f:ajax event="change"
										execute="#{empregadoBean.verificaEmailOuBip()}" render="@form" />
									<f:selectItem itemValue="" itemLabel="::Selecione::" />
									<f:selectItem itemValue="Bip" itemLabel="Bip" />
									<f:selectItem itemValue="Celular" itemLabel="Celular" />
									<f:selectItem itemValue="Comercial" itemLabel="Comercial" />
									<f:selectItem itemValue="Email" itemLabel="Email" />
									<f:selectItem itemValue="Fax" itemLabel="Fax" />
									<f:selectItem itemValue="Residencial" itemLabel="Residencial" />
								</h:selectOneMenu>
								<h:outputLabel value="Contato:*" styleClass="label" />
								<h:inputText id="emailBip" maxlength="70" size="70" required="true"
									tabindex="7" label="Contato"
									rendered="#{empregadoBean.emailOuBip}"
									value="#{empregadoBean.contato.deContato}">
									<f:validateLength maximum="70" />
								</h:inputText>
								<p:inputMask id="tel" value="#{empregadoBean.contato.deContato}"
									required="true" tabindex="7" label="Contato"
									mask="([telefone removido]" rendered="#{!empregadoBean.emailOuBip}" />
							</h:panelGrid>
							<h:panelGrid columns="4">
								<h:outputLabel value="Complemento:" styleClass="label" />
								<h:inputText tabindex="8" label="Complemento"
									value="#{empregadoBean.contato.deComplementoContato}"
									styleClass="inputEndereco">
									<f:validateLength maximum="70" />
								</h:inputText>
								<h:outputLabel value="Prioridade:*" styleClass="label" />
								<h:inputText value="#{empregadoBean.contato.nuPrioridade}"
									styleClass="input" required="true" tabindex="9" maxlength="5" size="5"
									label="Prioridade">
									<f:convertNumber integerOnly="true" />
									<f:validateLength maximum="5" />
								</h:inputText>
							</h:panelGrid>
							<p:commandButton action="#{empregadoBean.salvarContato}"
								value="#{btn.salvar}" tabindex="10"
								update="mensagem, @form, tabpanelPrincipal:formListaContato" />
						</p:fieldset>
					</h:form>

Alguém poderia me ajudar.

4 Respostas

H

Tente usar o ValueChangeListener, pode ser que dê certo.

E

Tentei usar mas, não deu certo.

È como se eu tivesse que colocar o componente na árvore de novo manualmente.

H

Você já tentou usar o f:ajax pra dar um render na propriedade que deseja atualizar. Usava isso frequentemente num projeto em que trabalhei no passado, embora fosse em primefaces.

E

resolvi assim:

defini os componentes como rendered = true e fiz um bind desse componente com uma propriedade no managedBean. A partir daí, fiz o controle do componente definindo rendered = false quando necessário.

Criado 30 de julho de 2012
Ultima resposta 7 de ago. de 2012
Respostas 4
Participantes 2