2014-10-15 11 views
5

मुझे चयनित मानों को पी: पेड़ में रीसेट करने की आवश्यकता है। मैं उस फॉर्म में रीसेट बटन बनाता हूं जहां मैंने अपना पी: पेड़ तत्व रखा है। उस बटन ने पेड़ के चयनित मानों को शून्य मानों के रूप में रखा है। बैकिंग बीन में जब मैं इस बटन को दबाता हूं तो मान स्पष्ट होते हैं। लेकिन इंटरफ़ेस में भी जब मैं पृष्ठ को रीफ्रेश करता हूं तो पुराना चयनित मान अभी भी चिह्नित होता है।रीसेट करें पी: पेड़ चयनित मान

पी: पेड़

<p:tree id="treeClassifier" 
     value="#{navBarController.rootClassifier}" 
     var="node"   
     selectionMode="checkbox" 
     selection="#{navBarController.selectedClassifiers}" 
     style="height: 100px;width: 280px; margin-bottom: 0px; overflow: auto"> 
     <p:treeNode expandedIcon="ui-icon-folder-open" 
        collapsedIcon="ui-icon-folder-collapsed"> 
     <h:outputText value="#{node.description}(#{node.code})"/> 
     </p:treeNode> 
</p:tree> 

पेड़ बनाएँ: यहाँ मेरी कोड है

public TreeNode initTree(GenericTree<Classifier> tree) { 
     GenericTreeNode<Classifier> root = tree.getRoot(); 
     TreeNode rootJSF = new DefaultTreeNode("root", null); 
     for (GenericTreeNode<Classifier> gnt : root.getChildren()) { 
      if (gnt.getData().getId() != -1) { 
       TreeNode childTree = new DefaultTreeNode(gnt.getData(), rootJSF); 
       //rootJSF.getChildren().add(childTree); 
       //f_aux(gnt, rootJSF); 
       addChildsToTree(gnt, childTree); 
      } 
     } 
     return rootJSF; 
    } 

    public void addChildsToTree(GenericTreeNode<Classifier> parent, TreeNode parentJSF) { 
     for (GenericTreeNode<Classifier> child : parent.getChildren()) { 
      TreeNode newNode = new DefaultTreeNode(child.getData(), parentJSF); 
      //parentJSF.getChildren().add(newNode); 
      addChildsToTree(child, newNode); 
     } 
    } 

रीसेट समारोह:

public void reset() { 
     .... 
     this.selectedClassifiers = null; 
} 

क्या मेरी कोड में गलत क्या है?

उत्तर

3

इन सुझावों के साथ मुझे एहसास हुआ कि मुझे चयनित सरणी से मानों को रीसेट करने और पेड़ में नोड्स को अपडेट करने की आवश्यकता है। इसलिए मैंने अपने कोड में निम्नलिखित परिवर्तन किए:

public void reset() { 
     .... 
     this.selectedClassifiers = null; 
     this.rootNode = initTree(tree); 
} 

    public TreeNode initTree(GenericTree<Classifier> tree) { 
     GenericTreeNode<Classifier> root = tree.getRoot(); 
     TreeNode rootJSF = new DefaultTreeNode("root", null); 
     rootJSF.setSelected(false); 
     for (GenericTreeNode<Classifier> gnt : root.getChildren()) { 
     if (gnt.getData().getId() != -1) { 
      TreeNode childTree = new DefaultTreeNode(gnt.getData(), rootJSF); 
      childTree.setSelected(false); 
      addChildsToTree(gnt, childTree); 
     } 
    } 
    return rootJSF; 
} 

public void addChildsToTree(GenericTreeNode<Classifier> parent, TreeNode parentJSF) { 
    for (GenericTreeNode<Classifier> child : parent.getChildren()) { 
     TreeNode newNode = new DefaultTreeNode(child.getData(), parentJSF); 
     newNode.setSelected(false); 
     addChildsToTree(child, newNode); 
    } 
} 

इन परिवर्तनों के साथ मैं अपना कोड ठीक करता हूं।

3

आप नीचे दिए गए उदाहरण से प्राप्त कर सकते हैं जो विधि रीसेट किया गया चयन नोड ताजा मानों के लिए उपयोग किया जाता है।

एक्सएचटीएमएल

<h:form> 
    <p:growl id="msgs" showDetail="true" escape="false"/> 
    <p:inputText value="#{treeSelectionView.input}" /> 
    <h3 style="margin-top:0">Single</h3> 
    <p:tree value="#{treeSelectionView.root1}" 
      id="simpleSelection" 
      var="doc" 
      selectionMode="single" 
      selection="#{treeSelectionView.selectedNode}" 
      dynamic="true"> 
     <p:treeNode expandedIcon="ui-icon-folder-open" 
        collapsedIcon="ui-icon-folder-collapsed"> 
      <h:outputText value="#{doc.name}"/> 
     </p:treeNode> 
     <p:treeNode type="document" icon="ui-icon-document"> 
      <h:outputText value="#{doc.name}" /> 
     </p:treeNode> 
     <p:treeNode type="picture" icon="ui-icon-image"> 
      <h:outputText value="#{doc.name}" /> 
     </p:treeNode> 
     <p:treeNode type="mp3" icon="ui-icon-video"> 
      <h:outputText value="#{doc.name}" /> 
     </p:treeNode> 
    </p:tree> 

    <p:commandButton value="Display" 
        update="msgs" 
        icon="ui-icon-newwin" 
        actionListener="#{treeSelectionView.displaySelectedSingle}"/> 
    <p:commandButton value="Reset" 
        update="simpleSelection" 
        icon="ui-icon-newwin" 
        process="@this" 
        actionListener="#{treeSelectionView.resetSelectedNode}" /> 
</h:form> 

managedbean

@ManagedBean(name = "treeSelectionView") 
@ViewScoped 
public class SelectionView implements Serializable { 

    private TreeNode root1; 
    private TreeNode selectedNode; 
    private String input; 

    public String getInput() { 
     return input; 
    } 

    public void setInput(String input) { 
     this.input = input; 
    } 

    @ManagedProperty("#{documentService}") 
    private DocumentService service; 

    @PostConstruct 
    public void init() { 
     root1 = service.createDocuments(); 
    } 

    public TreeNode getRoot1() { 
     return root1; 
    } 

    public TreeNode getSelectedNode() { 
     return selectedNode; 
    } 

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

    public void setService(DocumentService service) { 
     this.service = service; 
    } 

    public void displaySelectedSingle() { 
     System.out.println("input: " + input); 
     if (selectedNode != null) { 
      FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Selected", selectedNode.getData().toString()); 
      FacesContext.getCurrentInstance().addMessage(null, message); 
     } 
    } 

    public void resetSelectedNode(ActionEvent event) { 
     FacesContext context = FacesContext.getCurrentInstance(); 
     Application application = context.getApplication(); 
     ViewHandler viewHandler = application.getViewHandler(); 
     UIViewRoot viewRoot = viewHandler.createView(context, context.getViewRoot().getViewId()); 
     context.setViewRoot(viewRoot); 
     context.renderResponse(); //Optional 
    } 
} 

यह भी देखें: Clear Input Components

+0

मैं आपके फ़ंक्शन रीसेट की कोशिश करता हूं एक चयन बीन में चयन एकाधिक चयन के साथ और कुछ भी होता है: \। इस विशिष्ट मामले के लिए एक उदाहरण दे सकता है? – tech4

+0

@ टेक 4 मैं पहले से ही एक और उदाहरण पोस्ट करता हूं। – wittakarn

0

यह वही मैं अपनी परियोजनाओं में क्या है: मैं इस विधि को परिभाषित है, और यह कहते हैं जहाँ मैं चाहता हूँ।

public static void resetAllInputChildren(String parentId) { 
    FacesContext currentInstance = FacesContext.getCurrentInstance(); 
    if (currentInstance != null && currentInstance.getViewRoot() != null) { 
     RequestContext.getCurrentInstance().reset(parentId); 
    } 
} 
parentId के बजाय

, मैं सामान्य रूप से प्रपत्र आईडी निर्धारित किया है। लेकिन यह आपकी पसंद है, आप पैरेंट आईडी के रूप में कोई घटक आईडी सेट कर सकते हैं।

एक और बात यह एक प्राइमफेस मुद्दा नहीं है, मैंने जो समाधान सुझाया है, वह सभी जेएसएफ 2 परियोजनाओं और सभी इनपुट घटकों पर लागू होता है।

0

यहां एक और उदाहरण।

एक्सएचटीएमएल

<?xml version="1.0" encoding="UTF-8"?> 
<!-- 
To change this license header, choose License Headers in Project Properties. 
To change this template file, choose Tools | Templates 
and open the template in the editor. 
--> 
<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:h="http://java.sun.com/jsf/html" 
     xmlns:f="http://java.sun.com/jsf/core" 
     xmlns:ui="http://java.sun.com/jsf/facelets" 
     xmlns:p="http://primefaces.org/ui"> 
    <h:head> 
     <f:facet name="first"> 
      <meta http-equiv="Content-Type" 
        content="text/html; charset=UTF-8" /> 
      <meta name="viewport" 
        content="user-scalable=no, 
        width=device-width, 
        initial-scale=1.0, 
        maximum-scale=1.0"/> 
     </f:facet> 

     <title>Tree provides three selection modes, "single", "multiple" and "checkbox".</title> 
    </h:head> 

    <h:body id="bodyView"> 
     <h:form> 
      <p:growl id="msgs" showDetail="true" escape="false"/> 

      <h3 style="margin-top:0">Single</h3> 
      <p:tree value="#{treeSelectionView.root1}" 
        id="simpleSelection" 
        var="doc" 
        selectionMode="single" 
        selection="#{treeSelectionView.selectedNode}"> 
       <p:treeNode expandedIcon="ui-icon-folder-open" 
          collapsedIcon="ui-icon-folder-collapsed"> 
        <h:outputText value="#{doc.name}"/> 
       </p:treeNode> 
       <p:treeNode type="document" icon="ui-icon-document"> 
        <h:outputText value="#{doc.name}" /> 
       </p:treeNode> 
       <p:treeNode type="picture" icon="ui-icon-image"> 
        <h:outputText value="#{doc.name}" /> 
       </p:treeNode> 
       <p:treeNode type="mp3" icon="ui-icon-video"> 
        <h:outputText value="#{doc.name}" /> 
       </p:treeNode> 
      </p:tree> 

      <p:commandButton value="Display" 
          update="msgs" 
          icon="ui-icon-newwin" 
          actionListener="#{treeSelectionView.displaySelectedSingle}"/> 
      <p:commandButton value="Reset" 
          update="simpleSelection" 
          icon="ui-icon-newwin" 
          process="@this" 
          actionListener="#{treeSelectionView.resetSelectedNode}" /> 

      <h3>Multiple with metakey</h3> 
      <p:tree id="multipleSelection" 
        value="#{treeSelectionView.root1}" 
        var="doc" 
        selectionMode="multiple" 
        selection="#{treeSelectionView.selectedNodes1}"> 
       <p:treeNode expandedIcon="ui-icon-folder-open" 
          collapsedIcon="ui-icon-folder-collapsed"> 
        <h:outputText value="#{doc.name}"/> 
       </p:treeNode> 
       <p:treeNode type="document" icon="ui-icon-document"> 
        <h:outputText value="#{doc.name}" /> 
       </p:treeNode> 
       <p:treeNode type="picture" icon="ui-icon-image"> 
        <h:outputText value="#{doc.name}" /> 
       </p:treeNode> 
       <p:treeNode type="mp3" icon="ui-icon-video"> 
        <h:outputText value="#{doc.name}" /> 
       </p:treeNode> 
      </p:tree> 

      <p:commandButton value="Display" 
          update="msgs" 
          icon="ui-icon-newwin" 
          actionListener="#{treeSelectionView.displaySelectedMultiple(treeSelectionView.selectedNodes1)}"/> 
      <p:commandButton value="Reset" 
          update="multipleSelection" 
          icon="ui-icon-newwin" 
          process="@this" 
          actionListener="#{treeSelectionView.resetSelectedNode}" /> 

      <h3>Multiple with Checkbox</h3> 
      <p:tree id="checkboxSelection" 
        value="#{treeSelectionView.root1}" 
        var="doc" 
        selectionMode="checkbox" 
        selection="#{treeSelectionView.selectedNodes2}"> 
       <p:treeNode icon="ui-icon-note"> 
        <h:outputText value="#{doc.name}"/> 
       </p:treeNode> 
       <p:treeNode type="document" icon="ui-icon-document"> 
        <h:outputText value="#{doc.name}" /> 
       </p:treeNode> 
       <p:treeNode type="picture" icon="ui-icon-image"> 
        <h:outputText value="#{doc.name}" /> 
       </p:treeNode> 
       <p:treeNode type="mp3" icon="ui-icon-video"> 
        <h:outputText value="#{doc.name}" /> 
       </p:treeNode> 
      </p:tree> 

      <p:commandButton value="Display" 
          update="msgs" 
          icon="ui-icon-newwin" 
          actionListener="#{treeSelectionView.displaySelectedMultiple(treeSelectionView.selectedNodes2)}"/> 
      <p:commandButton value="Reset" 
          update="checkboxSelection" 
          icon="ui-icon-newwin" 
          process="@this" 
          actionListener="#{treeSelectionView.resetSelectedNode}" /> 
     </h:form> 
    </h:body> 
</html> 

managedbean treeSelectionView

import java.io.Serializable; 
import javax.annotation.PostConstruct; 
import javax.faces.application.Application; 
import javax.faces.application.FacesMessage; 
import javax.faces.application.ViewHandler; 
import javax.faces.bean.ManagedBean; 
import javax.faces.bean.ManagedProperty; 
import javax.faces.bean.ViewScoped; 
import javax.faces.component.UIViewRoot; 
import javax.faces.context.FacesContext; 
import javax.faces.event.ActionEvent; 
import org.primefaces.model.TreeNode; 
import org.primefaces.showcase.service.DocumentService; 

@ManagedBean(name = "treeSelectionView") 
@ViewScoped 
public class SelectionView implements Serializable { 

    private TreeNode root1; 
    private TreeNode root2; 
    private TreeNode root3; 
    private TreeNode selectedNode; 
    private TreeNode[] selectedNodes1; 
    private TreeNode[] selectedNodes2; 

    @ManagedProperty("#{documentService}") 
    private DocumentService service; 

    @PostConstruct 
    public void init() { 
     root1 = service.createDocuments(); 
     root2 = service.createDocuments(); 
     root3 = service.createDocuments(); 
    } 

    public TreeNode getRoot1() { 
     return root1; 
    } 

    public TreeNode getRoot2() { 
     return root2; 
    } 

    public TreeNode getRoot3() { 
     return root3; 
    } 

    public TreeNode getSelectedNode() { 
     return selectedNode; 
    } 

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

    public TreeNode[] getSelectedNodes1() { 
     return selectedNodes1; 
    } 

    public void setSelectedNodes1(TreeNode[] selectedNodes1) { 
     this.selectedNodes1 = selectedNodes1; 
    } 

    public TreeNode[] getSelectedNodes2() { 
     return selectedNodes2; 
    } 

    public void setSelectedNodes2(TreeNode[] selectedNodes2) { 
     this.selectedNodes2 = selectedNodes2; 
    } 

    public void setService(DocumentService service) { 
     this.service = service; 
    } 

    public void displaySelectedSingle() { 
     if (selectedNode != null) { 
      FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Selected", selectedNode.getData().toString()); 
      FacesContext.getCurrentInstance().addMessage(null, message); 
     } 
    } 

    public void displaySelectedMultiple(TreeNode[] nodes) { 
     if (nodes != null && nodes.length > 0) { 
      StringBuilder builder = new StringBuilder(); 

      for (TreeNode node : nodes) { 
       builder.append(node.getData().toString()); 
       builder.append("<br />"); 
      } 

      FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Selected", builder.toString()); 
      FacesContext.getCurrentInstance().addMessage(null, message); 
     } 
    } 

    public void resetSelectedNode(ActionEvent event) { 
     FacesContext context = FacesContext.getCurrentInstance(); 
     Application application = context.getApplication(); 
     ViewHandler viewHandler = application.getViewHandler(); 
     UIViewRoot viewRoot = viewHandler.createView(context, context.getViewRoot().getViewId()); 
     context.setViewRoot(viewRoot); 
     context.renderResponse(); //Optional 
    } 
} 

managedbean documentService

import javax.faces.bean.ApplicationScoped; 
import javax.faces.bean.ManagedBean; 
import org.primefaces.model.DefaultTreeNode; 
import org.primefaces.model.TreeNode; 
import org.primefaces.showcase.domain.Document; 

@ManagedBean(name = "documentService") 
@ApplicationScoped 
public class DocumentService { 

    public TreeNode createDocuments() { 
     TreeNode root = new DefaultTreeNode(new Document("Files", "-", "Folder"), null); 

     TreeNode documents = new DefaultTreeNode(new Document("Documents", "-", "Folder"), root); 
     TreeNode pictures = new DefaultTreeNode(new Document("Pictures", "-", "Folder"), root); 
     TreeNode movies = new DefaultTreeNode(new Document("Movies", "-", "Folder"), root); 

     TreeNode work = new DefaultTreeNode(new Document("Work", "-", "Folder"), documents); 
     TreeNode primefaces = new DefaultTreeNode(new Document("PrimeFaces", "-", "Folder"), documents); 

     //Documents 
     TreeNode expenses = new DefaultTreeNode("document", new Document("Expenses.doc", "30 KB", "Word Document"), work); 
     TreeNode resume = new DefaultTreeNode("document", new Document("Resume.doc", "10 KB", "Word Document"), work); 
     TreeNode refdoc = new DefaultTreeNode("document", new Document("RefDoc.pages", "40 KB", "Pages Document"), primefaces); 

     //Pictures 
     TreeNode barca = new DefaultTreeNode("picture", new Document("barcelona.jpg", "30 KB", "JPEG Image"), pictures); 
     TreeNode primelogo = new DefaultTreeNode("picture", new Document("logo.jpg", "45 KB", "JPEG Image"), pictures); 
     TreeNode optimus = new DefaultTreeNode("picture", new Document("optimusprime.png", "96 KB", "PNG Image"), pictures); 

     //Movies 
     TreeNode pacino = new DefaultTreeNode(new Document("Al Pacino", "-", "Folder"), movies); 
     TreeNode deniro = new DefaultTreeNode(new Document("Robert De Niro", "-", "Folder"), movies); 

     TreeNode scarface = new DefaultTreeNode("mp3", new Document("Scarface", "15 GB", "Movie File"), pacino); 
     TreeNode carlitosWay = new DefaultTreeNode("mp3", new Document("Carlitos' Way", "24 GB", "Movie File"), pacino); 

     TreeNode goodfellas = new DefaultTreeNode("mp3", new Document("Goodfellas", "23 GB", "Movie File"), deniro); 
     TreeNode untouchables = new DefaultTreeNode("mp3", new Document("Untouchables", "17 GB", "Movie File"), deniro); 

     return root; 
    } 
} 

डोमेन

import java.io.Serializable; 

public class Document implements Serializable, Comparable<Document> { 

    private String name; 

    private String size; 

    private String type; 

    public Document(String name, String size, String type) { 
     this.name = name; 
     this.size = size; 
     this.type = type; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getSize() { 
     return size; 
    } 

    public void setSize(String size) { 
     this.size = size; 
    } 

    public String getType() { 
     return type; 
    } 

    public void setType(String type) { 
     this.type = type; 
    } 

    //Eclipse Generated hashCode and equals 
    @Override 
    public int hashCode() { 
     final int prime = 31; 
     int result = 1; 
     result = prime * result + ((name == null) ? 0 : name.hashCode()); 
     result = prime * result + ((size == null) ? 0 : size.hashCode()); 
     result = prime * result + ((type == null) ? 0 : type.hashCode()); 
     return result; 
    } 

    @Override 
    public boolean equals(Object obj) { 
     if (this == obj) { 
      return true; 
     } 
     if (obj == null) { 
      return false; 
     } 
     if (getClass() != obj.getClass()) { 
      return false; 
     } 
     Document other = (Document) obj; 
     if (name == null) { 
      if (other.name != null) { 
       return false; 
      } 
     } else if (!name.equals(other.name)) { 
      return false; 
     } 
     if (size == null) { 
      if (other.size != null) { 
       return false; 
      } 
     } else if (!size.equals(other.size)) { 
      return false; 
     } 
     if (type == null) { 
      if (other.type != null) { 
       return false; 
      } 
     } else if (!type.equals(other.type)) { 
      return false; 
     } 
     return true; 
    } 

    @Override 
    public String toString() { 
     return name; 
    } 

    public int compareTo(Document document) { 
     return this.getName().compareTo(document.getName()); 
    } 
} 
संबंधित मुद्दे