我想创建具有对话框表单功能的添加子项按钮。

在页面上有树形对话框和模式对话框。在树的每个节点上都是创建子按钮。如果单击创建子按钮,将显示模式形式,其中parentId将设置为单击按钮的节点的ID。

树:

 <h:form id="TestGroupListForm">
    <p:tree value="#{testTreeController.root}" var="node" dynamic="true" cache="false"
                    selectionMode="single"  selection="#{treeBean.selectedNode}" id="tree">

                <p:treeNode>
                    <h:outputText value="#{node.getName()}" />  <p:commandButton id="createButton#{node.getIdTestGroup()}" icon="ui-icon-plus"   value="#{bundle.Create}"  update="tree" oncomplete="TestGroupCreateDialog.show()"/>
                </p:treeNode>
            </p:tree>
 </h:form>


对话框:



        <h:form id="TestGroupCreateForm">

            <h:panelGroup id="display">
                <p:panelGrid columns="2" >


                    <p:outputLabel value="#{bundle.CreateTestGroupLabel_name}" for="name" />
                    <p:inputText id="name" value="#{testGroupController.selected.name}" title="#{bundle.CreateTestGroupTitle_name}" />
                    <h:inputHidden  id="parentId" value="#{testGroupController.selected.parentId}" />

                </p:panelGrid>
                <p:commandButton actionListener="#{testGroupController.saveNew}" value="#{bundle.Save}" update="display,:TestGroupListForm:tree,:growl" oncomplete="handleSubmit(xhr,status,args,TestGroupCreateDialog);"/>
                <p:commandButton value="#{bundle.Cancel}" onclick="TestGroupCreateDialog.hide()"/>
            </h:panelGroup>

        </h:form>

    </p:dialog>


我想要点击

<p:commandButton id="createButton#{node.getIdTestGroup()}" icon="ui-icon-plus"   value="#{bundle.Create}"  update="tree" oncomplete="TestGroupCreateDialog.show()"/>


将设置以下值:

<h:inputHidden  id="parentId" value="#{testGroupController.selected.parentId}" />


更新

我必须使用动作侦听器testGroupController.nodeListener来设置新项目的parentId。

    <p:commandButton process="@this" id="createButton" actionListener="#{testGroupController.nodeListener}" icon="ui-icon-plus"   value="#{bundle.CreateGroup}"  update=":TestGroupCreateForm" oncomplete="TestGroupCreateDialog.show()">
                            <f:attribute name="rawParentId" value="#{node.getIdTestGroup()}" />
  </p:commandButton>

最佳答案

您可以将parentId添加到现有的update=属性,如下所示:

update="tree parentId"


这将呈现parentId并将其值设置为testGroupController.selected.parentId

编辑

您可以使用以下方法处理从UI到的任何值:

process="myInputId"




<h:form>
    <h:inputText id="input"
                 value="#{bean.value}" />
    <h:outputText id="output"
                  value="#{bean.value}" />
    <p:commandButton process="input"
                     update="output"
                     value="Submit" />


单击按钮后,将在id="input"中设置bean.value的值(按process="input"的顺序)。接下来,您的id="output"将使用bean.value呈现(或更新)(按update="output"的顺序)。

关于jsf - 如何在Primeface中更新客户端上的组件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16347676/

10-12 20:07