2014-11-01 2 views
1

Я пишу какую-то страницу с компонентом дерева поверхностей. Я хочу обновить outputLabel после выбора узла дерева. Ярлык должен отображать имя текущего выбранного узла. Моя проблема заключается в том, что в этом случае управляющий компонент будет запускать прослушиватель в виде первичности. Метод прослушивателя вообще не вызывается. Я могу обновить outputLabel (с текущим значением времени от другого компонента), но я не могу использовать метод прослушивания. Вот моя страница фрагмент():p: tree node select listener не вызывается

<p:tree value="#{directoryTreeBuilder.root}" 
     var="node" 
     dynamic="true" 
     style="border: none;" 
     selectionMode="single" 
     selection="#{directoryTreeBuilder.selected}"> 
    <p:ajax event="select" 
      listener="#{directoryTreeBuilder.onDirSelected}" 
      update=":currentDir"/> 
    <p:treeNode> 
     <h:outputText value="#{node}" /> 
    </p:treeNode> 
</p:tree> 
... 
<h:outputText id="currentDir" value="#{directoryTreeBuilder.selected}" /> 

Здесь управляемый компонент:

@Named(value = "directoryTreeBuilder") 
@SessionScoped 
public class DirectoryTreeBuilder implements Serializable { 

/** 
* Directory facade bean. 
*/ 
@EJB 
private DirectoryFacadeLocal dirBean; 

/** 
* Tree structure root directory. 
*/ 
private TreeNode root; 

/** 
* Current selected directory. 
*/ 
private DefaultTreeNode selected; 

/** 
* Bean initialization method. 
*/ 
@PostConstruct 
public void init() { 
    //Root initiation. 
} 

/** 
* Root getter. 
* @return root directory with structure; 
*/ 
public TreeNode getRoot() { 
    return root; 
} 

/** 
* Get selected directory node. 
* @return primefaces treenode; 
*/ 
public TreeNode getSelected() { 
    return selected; 
} 

public void setSelected(TreeNode selected) { 
    this.selected = (DefaultTreeNode) selected; 
} 

/** 
* Selected event listener method. 
* @param e selection from primefaces 
*/ 
public void onDirSelected(NodeSelectEvent e) { 
    System.err.println("DIR SELECTED!"); 
    this.selected = (DefaultTreeNode) e.getTreeNode(); 
} 
} 

В настоящее время я бегу этот код на Glassfish v4 из NetBeans 8 пакетов. Во-первых, я использую PrimeFaces 4.0, но теперь он работает на PrimeFaces 5.1. Нет эффекта.

UPDATE: полный код страницы: http://pastebin.com/vEPtWtw2

+0

Я думаю, что проблема связана с кодом xhtml, который вы не показывали. – wittakarn

+0

Полный код страницы, добавленный с помощью pastebin (в OP). –

ответ

1

Вы должны гнездо p:tree внутри h:form, потому что JSF формы используют технику «пост-назад», чтобы представить данные формы обратно на страницу, которая содержит форму.

+0

Спасибо! Я решаю свою проблему. Извините за мою ошибку! –

+0

Добро пожаловать @ spoilt.exile. – wittakarn

Смежные вопросы