Primefaces Tree不会更新自己

时间:2014-11-27 16:54:00

标签: jsf primefaces tree el updates

我有一个带有primefaces树组件和一个简单框的页面。每次选择树节点时,都应更新框和树本身。如果我只为盒子设置更新值,它可以正常工作,但如果我也为树本身设置它,它只能工作一次。 我猜javascript和树初始化存在问题。

我的xhtml内容(doens'to工作 - 在更新中删除“myTree”然后它可以工作):

<p:tree id="myTree" value="#{anyBean.someNodes}" var="node"
        selectionMode="single" selection="#{anyBean.selectedNode}">
    <p:ajax event="select" update="myTree :#{component.parent.namingContainer.clientId}:bla"
            listener="#{anyBean.selectionChanged}" />
    <p:treeNode>
        <h:outputText value="#{node}" />
    </p:treeNode>
</p:tree>

<p:outputPanel id="bla">
    <div id="some-refresh-counter" />
    <script>
        jQuery('#some-refresh-counter').text( (new Date()).getTime() );
    </script>
</p:outputPanel>

我的豆子:

@ViewScoped
@ManagedBean
public class AnyBean implements Serializable {
    private static final long serialVersionUID = 3034385964446796122L;
    private static Log LOG = LogFactory.getLog(AnyBean.class);

    private TreeNode someNodes;
    private TreeNode selectedNode;

    @PostConstruct
    public void init() {
        this.someNodes = new DefaultTreeNode("Root");

        new DefaultTreeNode("A", this.someNodes);
        new DefaultTreeNode("B", this.someNodes);
        new DefaultTreeNode("C", this.someNodes);
        new DefaultTreeNode("D", this.someNodes);
        new DefaultTreeNode("E", this.someNodes);

        this.selectedNode = null;

        LOG.debug("initialized...");
    }

    public void selectionChanged(NodeSelectEvent event) {
        LOG.debug("selection changed to " + event.getTreeNode().getData());
    }


    public TreeNode getSomeNodes() {
        return someNodes;
    }

    public void setSomeNodes(TreeNode someNodes) {
        this.someNodes = someNodes;
    }

    public TreeNode getSelectedNode() {
        return selectedNode;
    }

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

我正在使用:

  • Primefaces:5.0
  • JSF:2.2.6
  • Java:1.7.0_71
  • Tomcat:7.0.55

亲切的问候

修改 我刚刚发现,如果我将update属性设置为包含表单的名称,它将完美地工作。例如:

<h:form id="fooform">
    <p:tree id="myTree" value="#{anyBean.someNodes}" var="node"
            selectionMode="single" selection="#{anyBean.selectedNode}">
        <p:ajax event="select" update=":fooform"
                listener="#{anyBean.selectionChanged}" />

但是,一旦我使用 EL ,它就会停止工作:

<h:form id="fooform">
    <p:tree id="myTree" value="#{anyBean.someNodes}" var="node"
            selectionMode="single" selection="#{anyBean.selectedNode}">
        <p:ajax event="select" update="#{&quot;:fooform&quot;}"
                listener="#{anyBean.selectionChanged}" />

编辑#2(解决方法)

我认为问题是-tag。我删除了它并添加了一个命令链接到我的节点outputtext,更新工作正常,但selectedNode属性没有更新。 这就是为什么我仍然使用-tag,但在完成时执行jQuery,点击更新表单的命令链接:

<h:form id="fooform">
    <p:commandLink style="display: none;" id="refresh-link" value="refresh-link" update="#{component.namingContainer.clientId}" />
    <p:tree id="myTree" value="#{anyBean.someNodes}" var="node"
            selectionMode="single" selection="#{anyBean.selectedNode}">
        <p:ajax event="select" update=":fooform"
                listener="#{anyBean.selectionChanged}"
                oncomplete="jQuery('#' + jQuery(this)[0].source.split(':').shift() + '\\:refresh-link').click()" />
        <p:treeNode>
            <h:outputText value="#{node}" />
        </p:treeNode>
    </p:tree>

0 个答案:

没有答案