Porównaj ceny domen i usług IT, sprzedawców z całego świata

Ustawienie domyślnych primefaces selectOneMenu z drzewa primefaces wybranego elementu w jsf z ajax


w pierwszej postaci mam drzewo wielokrotnego wyboru primefaces (wypełniane z LDAP), aw drugiej mam komponent selectOneMenu primefaces. Chciałbym, aby domyślne selectOneMenu (pierwsze wyświetlane w tym menu) było wartością wybranego węzła drzewa. Próbowałem użyć f: ajax .. ale to nie działa, ponieważ te elementy nie należą do tego samego formularza (nazwa selectOneMenu w atrybucie renderowania była nieznana ..)
oto mój index.xhtml, który zawiera wszystkie te elementy:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "[url=http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html]http://www.w3.org/TR/xhtml1/DT ... Bhtml[/url] xmlns="[url=http://www.w3.org/1999/xhtml"]http://www.w3.org/1999/xhtml"[/url]
xmlns:h="[url=http://java.sun.com/jsf/html"]http://java.sun.com/jsf/html"[/url]
xmlns:f="[url=http://java.sun.com/jsf/core"]http://java.sun.com/jsf/core"[/url]
xmlns:p="[url=http://primefaces.org/ui"]http://primefaces.org/ui"[/url]
xmlns:ui="[url=http://java.sun.com/jsf/facelets">]http://java.sun.com/jsf/facelets">[/url]
<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
<title>Insert title here</title>
<script src="JS/general.js" type="text/javascript"></script>
<link rel="stylesheet" type="text/css" href="CSS/general.css"/>
<script src="clean/clean-ajax-all.js"></script>
<script>
var crudmenu = "crudmenu";
var adduserform = "adduserform";
</script>
</h:head>
<body> <h:form id="form"> <p:growl id="messages" showDetail="true" escape="false"/> <p:tree value="#{treeBean.root}" var="node"
onNodeClick="this.form.submit();" selectionMode="multiple"
selection="#{treeBean.selectedNodes}" id="treeMultiple"> <p:treeNode>
<h:outputText value="#{node}"/>
</p:treeNode>
</p:tree>
<p:commandButton value="Display Selected" update="messages"
actionListener="#{treeBean.displaySelectedMultiple}" id="btnDisplay" rendered="false"/> </h:form>
<div id="adduserform" name="adduserform"
style="text-align: center; overflow: hidden; height: 0px; width: 270px; border: #040600 1px;">
<h:form>
<h:panelGrid border="1" columns="2">
ID : <p:selectOneMenu value="" panelStyle="width:150px"
effect="fade" var="p" style="width:160px" filter="true"
filterMatchMode="startsWith">
<f:selectItem itemLabel="#{treeBean.selectedNodeValue}"
itemValue=""/> </p:selectOneMenu>
objectClass : <p:selectOneMenu value="" panelStyle="width:150px"
effect="fade" var="p" style="width:160px" filter="true"
filterMatchMode="startsWith">
<f:selectItem itemLabel="Select One" itemValue=""/> </p:selectOneMenu>
</h:panelGrid>
</h:form>
</body>
</html>

a oto mój zarządzany Bob:
package org.primefaces.examples.view;import java.io.Serializable;import javax.faces.application.FacesMessage;
//other imports..@ManagedBean(name = "treeBean")
public class TreeBean implements Serializable {
private TreeNode root; private TreeNode[] selectedNodes; private String selectedNodeValue;
public TreeBean() { populateTreeFromLdap(); }
public String getSelectedNodeValue() {
if (selectedNodes != null && selectedNodes.length == 1)
for (TreeNode node : selectedNodes)
selectedNodeValue = node.getData().toString();
return selectedNodeValue;
}
public void setSelectedNodeValue(String selectedNodeValue) {
this.selectedNodeValue = selectedNodeValue;
}
public void populateTreeFromLdap(){
//code to get entries from LDAP..
}
} public TreeNode getRoot() {
return root;
} public TreeNode[] getSelectedNodes() {
return selectedNodes;
} public void setSelectedNodes(TreeNode[] selectedNodes) {
this.selectedNodes = selectedNodes;
} public void displaySelectedMultiple(ActionEvent event) {
if (selectedNodes != null && selectedNodes.length > 0) {
StringBuilder builder = new StringBuilder(); for (TreeNode node : selectedNodes) {
builder.append(node.getData().toString());
builder.append("");
} FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO,
"Selected", builder.toString()); FacesContext.getCurrentInstance().addMessage(null, message);
}
}
}

Problem polega na tym, jak zaktualizować "# {TreeBean.selectedNodevalue}" SelectOnTemenu 's ItemLabel po wybraniu wyboru węzła drzewa ..
BTW, jestem nowy w jsf i jestem bardzo sfrustrowany tym, że tradycyjne użycie AJAX do załadowania
zawartość w div z innej strony nie działa już w jsf..i, który był używany w niektórych poprzednich aplikacjach jsp/servlet i działa dobrze.
dzięki za pomoc!
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Jeśli rozumiem, co próbujesz zrobić, powiążę selectOneMenu z wartością na back-bob. W Twojej getSelectedNodeValue () ustawiłbym tę wartość. Ostatnią częścią tego działania jest użycie zdarzeń nasłuchiwania, jak pokazano tutaj: primefaces.org/showcase-labs/ui/treeEvents.jsf.

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się