Olá pessoal.
Quero fazer o seguinte:
- Cadastrar Setores. Onde cada Setor pode Possui um Setor Chefe. Para isso, deve-se informar o nome do Setor e caso haja Setor Chefe, o usuário deverá clicar no Botão “Selecionar” e com isso irá abrir um <p:dialog> e nela tera uma TreeNode listando os Setores e seus SubSetores. Após selecionar, a pessoa fecha a Tela e o Setor selecionado é mostrado na página de cadastro.
Problema:
- Setor o Setor selecionado na pagina em baixo da Dialog.
Hoje:
- Atualmente eu consigo fazer o cadastro normalmente se não mostro o setor selecionado na página. Com isso ele abre naturalmente a e seleciono o Setor Chefe.
- O problema acontece quando quero que apareca. Ae quando fecho a dialog, é dado automaticamente pelo framework tipo um new() no objeto, com isso quando cadastro o Setor o seu SetorChefe fica vazio. Mas aparece na tela num input normal com disabled=true;
O que quero:
- Quando selecionar o setor, ele atualizar o input mostrando o nodo selecionado na tree. Mas que não perca a referencia.
Código:
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.prime.com.tr/ui">
<ui:composition template="/WEB-INF/templates/default.xhtml">
<ui:define name="conteudo">
<f:view>
<h:form id="formSetor" >
<p:fieldset legend="#{msgs.titSetNew}" style="width: 50%">
<h:panelGrid columns="3" id="grid">
<h:outputLabel for="txtNome" value="#{msgs.lbSetNome}"/>
<p:inputText id="txtNome" value="${setorMNG.nome}"/>
<p:message for="txtNome" showDetail="true"/>
<h:outputLabel value="#{msgs.lbSetSetorPai}"/>
<p:inputText id="txtSetSet" value="${setorMNG.setorSelecionado}" disabled="true"/>
<p:commandButton value="Selecionar"
type="button"
onclick="dlg.show()"
image="ui-icon ui-icon-disk" />
</h:panelGrid>
<br/>
<p:commandButton
value="Salvar"
action="#{setorMNG.save}"
update="grid"/>
<p:commandButton value="#{msgs.btClear}"
action="#{setorMNG.clear()}"
process="@none" update="@form" />
</p:fieldset>
<p:dialog header="Selecione o Setor" widgetVar="dlg" width="400" position="center">
<h:form>
<h:panelGrid columns="2" style="margin-bottom:10px">
<p:tree id="treeSingle" value="#{setorMNG.opcoesMenuTree}" var="node"
Ï selectionMode="single"
selection="#{setorMNG.selectedNode}"
style="border: 0">
<p:ajax event="select" update=":formSetor" listener="#{setorMNG.selecionarSetor}" />
<p:treeNode>
<h:outputText
value="#{node}"
/>
</p:treeNode>
</p:tree>
</h:panelGrid>
<p:commandButton value="Fechar" oncomplete="dlg.hide();"/>
</h:form>
</p:dialog>
</h:form>
</f:view>
</ui:define>
</ui:composition>
</html>
O Metodo selecionarSetor da linha
tem o seu Java assim:
public void selecionarSetor(NodeSelectEvent event) {
setorSelecionado(event.getTreeNode().toString());
System.out.println(">>>>>>>: " + getSetorSelecionado());
}
Que uso par ver se selecionou mesmo e para setor no form.
Tambem usei o update do <p:ajax:> que quando uso que acontece o erro.
Quando não uso, ele tambem nao atualiza o form a baixo, mas o cadastro funciona normalmente.
PS: Uso primefaces 3.0M2 e meu java está como @requestscope
Alguem tem alguma luz?
Obrigado!