JSF modalPanel

9 respostas
G

Olá estou com um problema. Tenho uma pagina com uma grid. Quando aperto um botao de uma linha dessa grid de dados. Um modalPanel eh chamado.
Nesse modalPanel tenho um pequeno formulario com um campo Observacao para o usuario preencher.
Pois bem, problema:
Quando aperto o botao de submit do modalPanel a variavel que pus como value do meu campo de observacao não está sendo setada com o valor digitado.
Ou seja, meu managed bean não está sendo populado.

Codigo

<rich:dataTable onRowMouseOver="this.style.backgroundColor='#F1F1F1'" onRowMouseOut="this.style.backgroundColor='#{a4jSkin.tableBackgroundColor}'" cellpadding="0" cellspacing="0"
				value="#{SolicitacaoBean.solicitacoesEnviadas}" var="solicitacao" styleClass="table" border="1">
				<f:facet name="header">
					<h:outputText value="#{msg['page.label.solicitacoesenviadas']}" />
				</f:facet>
				<rich:column sortBy="#{solicitacao.codigo}">
					<f:facet name="header">
						<h:outputText value="#{msg['page.label.codigo']}" />
					</f:facet>
					<h:outputText value="#{solicitacao.codigo}" />
				</rich:column>
				........
				<h:column>
					<f:facet name="header">
						<h:outputText value="#{msg['botao.retornar']}" />
					</f:facet>
					<a4j:commandButton reRender="txtObs,hiCod" value="#{msg['botao.retornar']}">
						<f:setPropertyActionListener value="#{solicitacao}" target="#{SolicitacaoBean.solicitacaoEntidade}" />
						<rich:componentControl for="pnlRetorno" event="onclick" operation="show" />
					</a4j:commandButton>
				</h:column>

			</rich:dataTable>
		</h:panelGroup>

		<rich:modalPanel id="pnlRetorno" minHeight="250" keepVisualState="true" resizeable="false" minWidth="500" moveable="true">
				<f:facet name="header">
					<h:outputText id="hiCod" value="Solicitação #{SolicitacaoBean.solicitacaoEntidade.codigo}" />
				</f:facet>
			
				<f:facet name="controls">
				</f:facet>
				<h:panelGrid columns="2" columnClasses="td_align_right,td_align_left">
					<h:outputLabel value="Observação:"></h:outputLabel>
					<h:inputTextarea id="txtObs" rows="10" cols="50" required="true" value="#{SolicitacaoBean.observacao}" />
					<a4j:commandButton id="btnHideModal" value="#{msg['botao.salvar']}" reRender="pnlRetorno,formConSolicitacao" action="#{SolicitacaoBean.retornarHomologacaoTecnica}">
						<rich:componentControl attachTo="btnHideModal" for="pnlRetorno" event="oncomplete" operation="hide"></rich:componentControl>
					</a4j:commandButton>
					<a4j:commandLink id="lnkHideModal" immediate="true" value="#{msg['botao.cancelar']}">
						<rich:componentControl attachTo="lnkHideModal" for="pnlRetorno" event="onclick" operation="hide"></rich:componentControl>
					</a4j:commandLink>
				</h:panelGrid>
			
		</rich:modalPanel>

Att
Guilherme
Analista Programador Java, C++, .NET

9 Respostas

alves.Felipe

como que vc esta recuperando no seu mb o objeto da tabela?

G

Olá, o objeto está populado. No meu modalPanel já tenho o objeto que quero trabalhar.
Através da tag f:setproper… já consegui.
O meu problema é na hora que aperto o botão da modalPanel o valor da minha inputTextarea txtObs
não está sendo setado no atributo #{SolicitacaoBean.observacao}.
Ou seja, o botão não está setando o valor no atributo.
Com o objeto eu consigo le-lo normalmente, mas sem o atributo observacao atualizado.

alves.Felipe

humm… sera que não esta tendo algum problema de scopo?

vc usa o keepAlive?

yorgan

Você está abrindo e fechando a tag <h:form> para esse seu código?

[]´s

Daniel

G

yorgan:
Você está abrindo e fechando a tag <h:form> para esse seu código?

[]´s

Daniel

Sim sim, copiei apenas o trecho do codigo onde seto a entidade que a linha corresponde no meu Managed Bean
e o modalPanel q irá preencher um atributo do meu Bean.

Att

G

alves.Felipe:
humm… sera que não esta tendo algum problema de scopo?

vc usa o keepAlive?

Não ainda nao tentei com o keepAlive do ajax, vou tentar pra ver se funciona, mas acho
pouco provavel, pois o problema está em setar o atributo. Outra coisa que notei foi que
coloquei o required=“true” e ele não está validando. Ou seja, acho q a tela não está dando
submit. Verificarei essa dica e posteriormente publicarei os resultados.
Até lá se tiver mais alguma dica agradeço.

Att

J

Olá guilhermefacanha,

Estou com um problema idêntico ao que você descreveu neste tópico. Você conseguiu resolvê-lo?
Alguém tem alguma idéia da causa?

[]s

Jonas

yorgan

JonCastilho, você está com um <h:form> dentro do seu rich:modalPanel?
O RichModal exige que você tenha um form dentro dele para que os campos sejam submetidos. Isso está na documentação do RichFaces.
A estrutura deve ficar +/- assim:

<h:form>
        ....seu código....
        <a4j:commandButton id="btnModal" value="Chamada Modal">  
                 <rich:componentControl for="btnModal" event="onclick" operation="show" />  
        </a4j:commandButton>  
</h:form>

<rich:modalPanel minHeight="250" minWidth="500">
     <f:facet name="header">  
          <h:outputText id="hiCod" value="Solicitação #{SolicitacaoBean.solicitacaoEntidade.codigo}" />  
     </f:facet>
     <h:form>
              ....seu formulário....
     </h:form>
</rich:modalPanel>

Você deve deixar o RichModalPanel fora do form da página para que não ocorra o erro de um formulário estar dentro do outro.

[]´s

Daniel

J

Obrigado pela dica yorgan! Meu problema era outro, entretanto…

O form dentro do modalPanel já existia, mas não conseguia fazer nenhum submit… depois de muito quebrar a cabeça, eu reparei que tinha colocado um form exterior no template da página (o que agora descobri ser uma péssima coisa pra se fazer), e este form estava complicando as coisas para o modalPanel.

Agora deu tudo certo, obrigado pela dica!

[]s

Jonas

Criado 8 de junho de 2009
Ultima resposta 24 de fev. de 2010
Respostas 9
Participantes 4