E ae galera,
Tenho uma aplicação dividida em duas partes, uma lista com registros do banco, e um formulario para efetuar atualizações nos registros. Quando o usuário seleciona um item na lista, automaticamente o formulario recebe os atributos do item selecionado. Ali ele pode alterar os valores e salvar novamente.
O problema é que nem todos os atributos devem ser alterados, então aqueles que não vou alterar eu deixo sem inputText. O erro está que quando o usuário clica em salvar, os campos que não tem inputText ficam nulos e se perdem no espaço sideral.
Esse é o meu formulário, como podem ver, o código não deveria estar aí. Aí vem alguém e diz “Ah, usa output ou readOnly=true”. Já tentei, mesmo problema. Além desse tem outros campos que nem devem estar aí.
<p:panel id="fichaLocalidade" style="height:360px;" >
<p:panelGrid id="panel" columns="2" style="margin-bottom:10px">
<h:outputLabel value="Código:" />
<p:inputText id="codigo" value="#{localidadeController.localidade.id.codigo}"/>
<h:outputLabel value="Nome:" />
<p:inputText id="nome" value="#{localidadeController.localidade.nome}"/>
<p:commandButton id="insert" value="Salvar" action="#{localidadeController.adiciona}" icon="ui-icon-disk" ajax="false" />
<p:commandButton id="delete" value="Apagar" action="#{localidadeController.remove}" icon="ui-icon-trash" ajax="false" />
</p:panelGrid>
</p:panel>
A aplicação é bem grande, então se precisar de mais código eu posto aqui…
Obrigado por enquanto galera!!!
Amigo,
Você poderia postar o formulário inteiro? Assim podemos verificar se alguma coisa lá atrás não está “danificando” o resto do seu form.
Uma dica poderosa é tentar criar isolamentos, com panel e outras coisas que faça você renderizar somente um pedaço do form, ou seja, nunca renderizar todo o form, quando é necessário esse tipo de transação, assim você economiza processamento e tempo com estas coisas.
Um abraço.
Boa tarde matheusgeres.
Primeiro agradeço aí pelo interesse. A aplicação inteira é um pouco grande, sendo assim estruturei só com os form’s e o painel que tem o botão para salvar. Mas agora que comentou sobre a renderização algo começou a fazer sentido. Vejamos, quando eu seleciono um item de minha lista, é executado o seguinte comando:
<p:ajax event="rowSelect" listener="#{localidadeController.onRowSelect}" update=":formTemplate:useCase:mapPanel, :formTemplate:useCase:fichaLocalidade, :formTemplate:useCase:outputTituloLocalidade" />
Ou seja, em teoria estou renderizando a :formTemplate:useCase:fichaLocalidade inteira. Até aí sem problemas, debugando eu consigo comprovar que a minha entidade está com a entidade que eu selecionei na lista. O problema é quando clico no botão salvar, a partir daí tudo que não representei na minha página fica null.
<h:form id="formTemplate">
<h:form id="useCase">
<p:panel style="height:390px;">
<p:dataTable id="tabela" emptyMessage="Sem dados" paginatorPosition="bottom" paginator="true" rows="10" var="localidade" value="#{localidadeController.localidades}" selectionMode="single" selection="#{localidadeController.selectedLocalidade}" rowKey="#{localidade.id.codigo}">
<f:facet name="header">
<p:commandButton id="refreshButton" value="Atualizar" icon="ui-icon-refresh" update="tabela" action="#{localidadeController.lista}" ajax="false"/>
</f:facet>
<p:column headerText="Código"> #{localidade.id.codigo} </p:column>
<p:column headerText="Nome"> #{localidade.nome} </p:column>
<p:ajax event="rowSelect" listener="#{localidadeController.onRowSelect}" update=":formTemplate:useCase:mapPanel, :formTemplate:useCase:fichaLocalidade, :formTemplate:useCase:outputTituloLocalidade" />
</p:dataTable>
</p:panel>
<p:panel id="fichaLocalidade" style="height:360px;" >
<p:panelGrid id="panel" columns="2" style="margin-bottom:10px">
<h:outputLabel value="Código:" />
<p:inputText id="codigo" value="#{localidadeController.localidade.id.codigo}"/>
<h:outputLabel value="Nome:" />
<p:inputText id="nome" value="#{localidadeController.localidade.nome}"/>
<p:commandButton id="insert" value="Salvar" action="#{localidadeController.adiciona}" icon="ui-icon-disk" ajax="false" />
<p:commandButton id="delete" value="Apagar" action="#{localidadeController.remove}" icon="ui-icon-trash" ajax="false" />
</p:panelGrid>
</p:panel>
</h:form>
</h:form>
[quote=matheusgeres]Amigo,
Você poderia postar o formulário inteiro? Assim podemos verificar se alguma coisa lá atrás não está “danificando” o resto do seu form.
Uma dica poderosa é tentar criar isolamentos, com panel e outras coisas que faça você renderizar somente um pedaço do form, ou seja, nunca renderizar todo o form, quando é necessário esse tipo de transação, assim você economiza processamento e tempo com estas coisas.
Um abraço.[/quote]
E seu backbean? Como ele está?
Tive problema parecidos quando o botão de ok, salvar, excluir e etc, quando estava em outro form, que não me enviava os dados, desta forma resolvi passando o id da conversation e as variáveis não se perderam no limbo. Um exemplo seria assim:
<p:commandButton value="Gravar" actionListener="#{bean.gravar()}" icon="ui-icon-disk" update=":form:elemento" rendered="#{bean.isPossuiDireitoGravar}">
<f:param name="cid" value ="#{bean.conversation.id}" />
</p:commandButton>
E lembrando que tenho get e setter do conversation injetado no meu Bean.
[quote=matheusgeres]E seu backbean? Como ele está?
Tive problema parecidos quando o botão de ok, salvar, excluir e etc, quando estava em outro form, que não me enviava os dados, desta forma resolvi passando o id da conversation e as variáveis não se perderam no limbo. Um exemplo seria assim:
<p:commandButton value="Gravar" actionListener="#{bean.gravar()}" icon="ui-icon-disk" update=":form:elemento" rendered="#{bean.isPossuiDireitoGravar}">
<f:param name="cid" value ="#{bean.conversation.id}" />
</p:commandButton>
E lembrando que tenho get e setter do conversation injetado no meu Bean.[/quote]
Era por aí o problema mesmo. Eu fiz uma limpa nos forms, deixei somente um para todo o caso de uso e funcionou belezinha. Agora vou te dizer, esses form’s são cheios de frescuras… o splitbutton ainda é um mistério pra mim, em dias de chuva ele não funciona, em dias de sol funciona que é uma beleza…
Bom, valeu amigo, fiz umas brincadeiras mas sei que é até pegar bem os macetes dos form’s…
Abraço e tenha um bom final de semana…
Realmente o problema com os forms é recorrente, mas nada do que alguns dias sofridos não possa ajudar. Recomendo sempre utilizar o Firebug, ele ajuda muito em clarear os possíveis problemas em tela, costuma sempre trazer algum alerta vermelho.
Está certo, que bom poder ajudar.