2014-03-03 3 views
0

primefaces 샘플에서 매우 간단한 트리 예제를 사용하려고합니다. 현재 선택된 항목을 표시하는 버튼이 있습니다. 그러나 getselection 함수의 결과는 항상 null입니다.primefaces 트리를 선택하면 항상 null이 반환됩니다.

<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:h="http://xmlns.jcp.org/jsf/html" 
    xmlns:p="http://primefaces.org/ui" 
    xmlns:f="http://xmlns.jcp.org/jsf/core"> 
<h:head> 
    <title>Facelet Title</title> 
</h:head> 
    <f:event type="preRenderView" listener="#{masterpage_bean.init()}" /> 


<h:body> 
     <h:form>  
<p:layout style="min-width:650px;min-height:400px;" id="head"> 
    <p:layoutUnit position="center" size="275" resizable="true"> 

    <p:growl id="messages" showDetail="true" />  
    <p:panel header="Work"> 
     <h:panelGrid columns="2" cellpadding="5"> 


     <p:tree id="treeSingle" value="#{masterpage_bean.root}" var="node" style="font-size: 12px" 
     selectionMode="single" 

     selection="#{masterpage_bean.selectedNode}"> 


    <p:treeNode>  
     <h:outputText value="#{node}" /> 

    </p:treeNode> 


</p:tree> 
     <p:commandButton value="Display Selected" action="#{masterpage_bean.displaySelectedSingle}" id="btnDisplay"/>   



     </h:panelGrid>  
    </p:panel> 

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

와 콩 :

XHTML과 콩 코드는 다음 - 은 (아마도이 ​​문제의 경우 나도 몰라 나는 빈을로드 XHTML에 전화를)
import javax.faces.application.FacesMessage; 
import javax.faces.bean.ManagedBean; 
import javax.faces.context.FacesContext; 
import javax.faces.view.ViewScoped; 
import org.primefaces.model.DefaultTreeNode; 
import org.primefaces.model.TreeNode; 

@ViewScoped 
@ManagedBean 
public class Masterpage_bean { 


TreeNode root; 
TreeNode selectedNode; 


    public void init(){ 
    selectedNode=new DefaultTreeNode("root",null); 

    root=new DefaultTreeNode("root",null); 

    TreeNode node0 = new DefaultTreeNode("Node 0", root); 
    TreeNode node1 = new DefaultTreeNode("Node 1", root); 
    TreeNode node2 = new DefaultTreeNode("Node 2", root); 

    TreeNode node00 = new DefaultTreeNode("Some guy G.J", node0); 
    TreeNode node01 = new DefaultTreeNode("Another the third", node0); 


    }  


    public TreeNode getRoot() { 
    return root; 
} 



    public TreeNode getSelectedNode() { 
    return selectedNode; 
} 

    public void setSelectedNode(TreeNode selectedNode) { 
    this.selectedNode = selectedNode; 
} 



    public void displaySelectedSingle() { 
     if(selectedNode != null) { 
      // this never happens ! 
    } 

} 

} 
+0

을보십시오 : 나는 시도보고 할 수 있습니다뿐만 아니라 다음 1.Removed 모든 레이아웃을 그리고 패널 -이 효과가 없었다. 또한 primefaces 라이브러리를 3.5 버전으로 다운 그레이드했습니다 (4.0을 사용 중입니다). displaySelectedSingle() 함수도 호출되지 않았습니다! – Jan

답변

0

xhtml에서 "actionListener"에 대한 "action"버튼을 변경하고 이벤트 태그를 종료했습니다. 자바 코드에서 "init"메서드 대신 생성자를 사용했습니다. 이

에게 자바 코드

import java.io.Serializable; 
import javax.faces.application.FacesMessage; 
import javax.faces.bean.ManagedBean; 
import javax.faces.bean.ViewScoped; 
import javax.faces.context.FacesContext; 
import javax.faces.event.ActionEvent; 

import org.primefaces.model.DefaultTreeNode; 
import org.primefaces.model.TreeNode; 

@ViewScoped 
@ManagedBean (name="masterpage_bean") 
public class TreeBean implements Serializable { 

    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 

    private TreeNode root; 

    private TreeNode selectedNode; 

    public TreeBean() { 
     root = new DefaultTreeNode("Root", null); 
     TreeNode node0 = new DefaultTreeNode("Node 0", root); 
     TreeNode node1 = new DefaultTreeNode("Node 1", root); 
     TreeNode node2 = new DefaultTreeNode("Node 2", root); 

     TreeNode node00 = new DefaultTreeNode("Some guy G.J", node0); 
     TreeNode node01 = new DefaultTreeNode("Another the third", node0); 
    } 

    public TreeNode getRoot() { 
     return root; 
    } 

    public TreeNode getSelectedNode() { 
     return selectedNode; 
    } 

    public void setSelectedNode(TreeNode selectedNode) { 
     this.selectedNode = selectedNode; 
    } 

    public void displaySelectedSingle(ActionEvent event) { 
     if(selectedNode != null) { 
      FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Selected", selectedNode.getData().toString()); 

      FacesContext.getCurrentInstance().addMessage(null, message); 
     } 
    } 
} 

유사한 문제에 대한 몇 가지 추가 검색 한 후 XHTML

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:h="http://java.sun.com/jsf/html" 
     xmlns:p="http://primefaces.org/ui" 
     xmlns:f="http://java.sun.com/jsf/facelets" 
     > 
<h:head> 
    <title>Facelet Title</title> 
</h:head> 

<h:body> 
    <h:form>  
<p:layout style="min-width:650px;min-height:400px;" id="head"> 
    <p:layoutUnit position="center" size="275" resizable="true"> 

    <p:growl id="messages" showDetail="true" />  
    <p:panel header="Work"> 
     <h:panelGrid columns="2" cellpadding="5"> 


     <p:tree id="treeSingle" value="#{masterpage_bean.root}" var="node" style="font-size: 12px" 
     selectionMode="single" 

     selection="#{masterpage_bean.selectedNode}"> 


    <p:treeNode>  
     <h:outputText value="#{node}" /> 

    </p:treeNode> 


</p:tree> 
     <p:commandButton value="Display Selected" actionListener="#{masterpage_bean.displaySelectedSingle}" update="messages" id="btnDisplay"/>   

     </h:panelGrid>  
    </p:panel> 

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

</h:body> 
</html> 
+0

감사합니다. 나는 그것이 작동하는 이유는 생성자 때문이라고 봅니다. 간단히 init()을 호출 할 수 있습니다. 생성자에서 - 그리고 내 코드는 또한 작동합니다. 빈은 분명히 콜 사이의 데이터를 잃어 버린다. 나는 @ViewScoped가 그 일을 처리 할 것이라고 생각했지만, 분명히 그렇지 못했다. – Jan

관련 문제