2015-04-24 6 views
0

Я разрабатываю приложение с помощью Primefaces в Liferay, мне нужно использовать p: treeTable compendent, случается, что узлы исчезают при нажатии на p: commandButton. Я верю, что имеет отношения с AJAX, если поместить код в managedBean в @PostConstruct, он работает нормальноисчезающие исчезающие вершины

Это мой .xhtml

<h:body> 
     <h:form id="form"> 
      <p:layout style="min-width:1050px;height:700px" styleClass="semBorda"> 
       <p:layoutUnit position="west" size="900" minSize="40" maxSize="310" 
        styleClass="semBorda"> 

        <p:panelGrid columns="2" style="width:300px"> 
         <f:facet name="header"> 
          <h:outputText value="Campos" /> 
         </f:facet> 

         <h:outputText value="Cidade" /> 
         <p:selectCheckboxMenu value="#{relatorioBean.selectedCidades}" 
          label="Cidades" filter="true"> 
          <f:selectItems value="#{relatorioBean.cidades}" /> 
         </p:selectCheckboxMenu> 

         <!--       <h:outputText value="Ramal" /> --> 
         <!--       <p:selectBooleanCheckbox value="" /> --> 

         <!--       <h:outputText value="Tipo de Ramal" /> --> 
         <!--       <p:selectBooleanCheckbox value="" /> --> 

         <!--       <h:outputText value="Suborgao" /> --> 
         <!--       <p:selectBooleanCheckbox value="" /> --> 

         <!--       <h:outputText value="Situação" /> --> 
         <!--       <p:selectBooleanCheckbox value="" /> --> 

         <h:outputText value="Polo" /> 
         <p:selectBooleanCheckbox value="#{relatorioBean.polo}" /> 

         <!--       <h:outputText value="Categoria Diurna" /> --> 
         <!--       <p:selectBooleanCheckbox value="" /> --> 

         <!--       <h:outputText value="Categoria Noturna" /> --> 
         <!--       <p:selectBooleanCheckbox value="" /> --> 

         <h:outputText value="Teste" /> 
         <p:inputText value="#{relatorioBean.teste}" /> 
        </p:panelGrid> 


        <p:panelGrid columns="1" style="margin-left:200px; margin-top:10px"> 

         <p:commandButton actionListener="#{relatorioBean.montarRaiz}" 
          value="Consultar" update="tree" styleClass="semB" /> 


        </p:panelGrid> 


       </p:layoutUnit> 

       <p:layoutUnit position="center" styleClass=""> 

        <p:treeTable value="#{relatorioBean.raiz}" var="ramal" id="tree"> 

         <p:column headerText="Name"> 
          <h:outputText value="#{ramal}" /> 
         </p:column> 


        </p:treeTable> 

       </p:layoutUnit> 
      </p:layout> 
     </h:form> 

    </h:body> 

Мои managedBean

package br.jus.tjpe.infosistelecom.controle; 

import br.jus.tjpe.infosistelecom.dao.OrgaoDao; 
import br.jus.tjpe.infosistelecom.dao.RamalDao; 
import br.jus.tjpe.infosistelecom.factory.OrgaoDaoFactory; 
import br.jus.tjpe.infosistelecom.factory.RamalDaoFactory; 
import br.jus.tjpe.infosistelecom.modelo.Ramal; 

import java.io.Serializable; 
import java.util.ArrayList; 

import javax.annotation.PostConstruct; 
import javax.faces.bean.ManagedBean; 
import javax.faces.bean.RequestScoped; 
import javax.faces.bean.ViewScoped; 
import javax.faces.event.ActionEvent; 

import org.primefaces.event.NodeCollapseEvent; 
import org.primefaces.event.NodeExpandEvent; 
import org.primefaces.model.DefaultTreeNode; 
import org.primefaces.model.TreeNode; 

@ManagedBean 
@RequestScoped 
public class RelatorioBean implements Serializable { 

    private ArrayList<Ramal> ramais; 
    private ArrayList<String> cidades; 
    private String[] selectedCidades; 
    private TreeNode root = new DefaultTreeNode("Root Node", null);; 
    private boolean polo; 
    private String teste; 

    public String getTeste() { 
     return teste; 
    } 

    public void setTeste(String teste) { 
     this.teste = teste; 
    } 

    public boolean getPolo() { 
     return polo; 
    } 

    public void setPolo(boolean polo) { 
     this.polo = polo; 
    } 

    public String[] getSelectedCidades() { 
     return selectedCidades; 
    } 

    public void setSelectedCidades(String[] selectedCidades) { 
     this.selectedCidades = selectedCidades; 
    } 

    public ArrayList<String> getCidades() { 
     return cidades; 
    } 

    public void setCidades(ArrayList<String> cidades) { 
     this.cidades = cidades; 
    } 

    public TreeNode getRaiz() { 
     return root; 
    } 

    public void setRaiz(TreeNode raiz) { 
     this.root = raiz; 
    } 

    public ArrayList<Ramal> getRamais() { 
     return ramais; 
    } 

    public void setRamais(ArrayList<Ramal> ramais) { 
     this.ramais = ramais; 
    } 

    @PostConstruct 
    public void init() { 

     cidades = new ArrayList<String>(); 
     OrgaoDao daoOrgao = OrgaoDaoFactory.createOrgaoDao(); 
     cidades = daoOrgao.listarCidades(); 

//  ramais = new ArrayList<Ramal>(); 
//  RamalDao daoRamal = RamalDaoFactory.createRamalDao(); 
//  ramais = daoRamal.listarTudo(); 

//  DefaultTreeNode no = new DefaultTreeNode("hgshdgs", this.root); 
//  DefaultTreeNode no1 = new DefaultTreeNode("hgssdsdshdgs", this.root); 
//  DefaultTreeNode no2 = new DefaultTreeNode("hgshdnjhsdghjdagjhggs", no1); 
//  DefaultTreeNode no3 = new DefaultTreeNode("hgshdnjhsdghjdagjhggs", this.root); 
//  DefaultTreeNode no24= new DefaultTreeNode("hgshdnjhsdghjdagjhggs", no3); 



    } 

    public void montarRaiz() { 

     //System.out.println("diuyfuidyfuidyfuidy"); 

//  root = new DefaultTreeNode("Root Node", null); 
//  ramais = new ArrayList<Ramal>(); 
//  RamalDao daoRamal = RamalDaoFactory.createRamalDao(); 
//  ramais = daoRamal.listarTudo(); 


//  DefaultTreeNode no = new DefaultTreeNode(ramais.get(0), raiz); 
//  DefaultTreeNode no1 = new DefaultTreeNode(ramais.get(1), raiz); 
//  
//  for (Ramal ramal : ramais) { 
//   
//   new DefaultTreeNode(ramal, this.root); 
//   
//  } 
// 
     DefaultTreeNode no = new DefaultTreeNode("hgshdgs", this.root); 
     DefaultTreeNode no1 = new DefaultTreeNode("hgssdsdshdgs", this.root); 
     DefaultTreeNode no2 = new DefaultTreeNode("hgshdnjhsdghjdagjhggs", no1); 
     DefaultTreeNode no3 = new DefaultTreeNode("hgshdnjhsdghjdagjhggs", this.root); 
     DefaultTreeNode no24= new DefaultTreeNode("hgshdnjhsdghjdagjhggs", no3); 


//  System.out.println(selectedCidades[0]); 
//  System.out.println(selectedCidades[1]); 


    } 

} 

Я пытаюсь решить это, но без успеха.

ответ

0

Попробуйте изменить сферу вашей ManagedBean к @ViewScoped(BalusC discussing scopes) Поскольку этот боб в настоящее время определяется как @RequestScoped, новый экземпляр будет создаваться и уничтожаться с каждым запросом. Я просто угадываю здесь, но когда ваши POST-команды commandButton через ajax, JSF понимает, что он должен перестроить ManagedBean во время фазы «RESTORE_VIEW», но этот как-то фактически не вызывает конструктор, потому что он обрабатывает запрос ajax. Тем не менее, из того, что вы нашли, JSF должен вызвать методы @PostConstruct во время этой фазы «RESTORE_VIEW» независимо от того, является ли запрос ajax или нет.

Другими словами, treeTable исчезает со страницы, потому что на тот момент она не существует на стороне сервера.

+0

Спасибо, человек, я пойду тест. –