Выбор дерева PrimeFaces нулевой - PullRequest
2 голосов
/ 15 июня 2011

Я использую компонент дерева PrimeFaces 2.2.1 на Glassfish 3.1

Я пытаюсь установить для выбранного узла в дереве объект TreeNode в моем компоненте поддержки, но он всегда равен нулю.

Я попросил поддержки на форуме PrimeFaces, но, к сожалению, не получил ответа.

<p:tree id="contextTree" value="#{contextTreeBean.contextRoot}" var="node" selectionMode="single" selection="#{contextTreeBean.selectedNode}">
        <p:treeNode>
            <h:outputText value="#{node.name}"/>
        </p:treeNode>
    </p:tree>
    <h:outputText id="output" value="#{contextTreeBean.output}"/>
    <p:commandButton id ="createButton" value="+" actionListener="#{contextTreeBean.createContext()}" update="contextTree, output"/>


@ManagedBean
@RequestScoped
public class contextTreeBean {

    @EJB
    private ContextFacadeLocal contextFacade;
    private Context context = new Context();
    private TreeNode contextRoot;
    private TreeNode selectedNode;
    private String output;

    /** Creates a new instance of contextTreeBean */
    public contextTreeBean() {
    }

    public void createContext() {
        output = selectedNode.getData().toString();
    }

    public String getOutput() {
        return output;
    }

    public void setOutput(String output) {
        this.output = output;
    }

    public TreeNode getSelectedNode() {
        return selectedNode;
    }

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

    public Context getContext() {
        return context;
    }

    public void setContext(Context context) {
        this.context = context;
    }

    public ContextFacadeLocal getContextFacade() {
        return contextFacade;
    }

    public void setContextFacade(ContextFacadeLocal contextFacade) {
        this.contextFacade = contextFacade;
    }

    public TreeNode getContextRoot() {
        return contextRoot;
    }

    public void setContextRoot(TreeNode contextRoot) {
        this.contextRoot = contextRoot;
    }

    @PostConstruct
    private void postConstruct() {
        populateContextTree();
    }

    private void populateContextTree() {
        buildContextTree(new DefaultTreeNode("Root", null), contextFacade.findRootContexts());
    }

    private void buildContextTree(TreeNode parentNode, List<Context> children) {
        for (Context currentContextNode : children) {
            TreeNode tempNode = new DefaultTreeNode(currentContextNode, parentNode);
            buildContextTree(tempNode, currentContextNode.getChildren());
        }
        contextRoot = parentNode;
    }
}

Ответы [ 2 ]

2 голосов
/ 15 июня 2011

Вы пытались проверить, является ли selectedNode нулевым, путем регистрации?Возможно, он устанавливается, но атрибут update вашего <p:commandButton> установлен неправильно.Помните, что по умолчанию <h:form> будет добавлять свой идентификатор к дочерним элементам.

Также убедитесь, что в <h:form>

нет ошибок проверки, выданных другими элементамине верится, что компонент дерева Primefaces будет работать правильно при поддержке управляемого @RequestScoped bean-компонента.Попробуйте изменить управляемый компонент на @ViewScoped, чтобы жизненный цикл управляемого компонента охватывал отдельные запросы.

0 голосов
/ 16 июня 2011

У меня был компонент Tree в шаблонном клиенте JSF с формой в шаблоне.Перемещение формы на страницу клиента сработало.Мне удалось сохранить бэк-запрос RequestScoped.

...