primefaces orderlist没有使用更改的订单进行更新

Raa*_*aaz 2 jsf primefaces

我有一个primefaces p:orderList,点击一个按钮弹出窗口.当我更改订单列表中的项目顺序,并单击弹出窗口上的保存订单按钮时,我没有看到包含更改顺序的列表.PFB我的代码 -

<p:commandButton ajax="true" id="toolOrderButton" value="Tool Order" onclick="toolOrderPopup.show()" type="button"/>
<p:dialog header="Tool Order" severity="alert" widgetVar="toolOrderPopup"
                        appendToBody="true">  
    <p:orderList id="toolOrderList" controlsLocation="right" value="#{toolBean.toolOrderList}" var="tool" itemLabel="#{tool}" itemValue="#{tool}" iconOnly="true"/>
    <p:commandButton ajax="true"  value="Save Order" process="@this" type="submit" actionListener="#{toolBean.setToolOrder}" oncomplete="toolOrderPopup.hide()"/>
    <p:commandButton value="Cancel" onclick="toolOrderPopup.hide()" type="button"/>   
</p:dialog>
Run Code Online (Sandbox Code Playgroud)

在豆中:

public void setToolOrder(){ 
    System.out.println("toolOrderList-" + BeanStringConverter.convertToString(toolOrderList));
}
Run Code Online (Sandbox Code Playgroud)

请让我知道代码可能出现的问题.

Ako*_*s K 5

您需要处理p:orderlist以获取orderList保存的模型:

<p:commandButton ajax="true" value="Save Order" 
                 process="@this toolOrderList"
                 actionListener="#{toolBean.setToolOrder}"
                 oncomplete="toolOrderPopup.hide()"/>
Run Code Online (Sandbox Code Playgroud)

与你的问题无关你可能有类似的东西:

<h:form>
    ...
    <p:commandButton ajax="true" id="toolOrderButton" value="Tool Order" onclick="toolOrderPopup.show()" type="button"/>
    ...
    <p:dialog header="Tool Order" severity="alert" widgetVar="toolOrderPopup"
                    appendToBody="true">  
        <p:orderList id="toolOrderList" controlsLocation="right" value="#{toolBean.toolOrderList}" var="tool" itemLabel="#{tool}" itemValue="#{tool}" iconOnly="true"/>
        <p:commandButton ajax="true" value="Save Order" 
                         process="@this" 
                         actionListener="#{toolBean.setToolOrder}" 
                         oncomplete="toolOrderPopup.hide()"/>
        <p:commandButton value="Cancel" 
                         onclick="toolOrderPopup.hide()" type="button"/>   
    </p:dialog>
</h:form>
Run Code Online (Sandbox Code Playgroud)

如果是这样,那么看看doc说的主题是什么appentToBody:

小心使用appendToBody作为页面定义,html dom会有所不同,例如,如果对话框位于h:form组件中并且启用了appendToBody,则浏览器对话框将不在表单中,并可能导致意外结果.在这种情况下,将窗体嵌套在对话框中.

另一种结构可能如下:

    <h:form id="first">
        ...
        <p:commandButton ajax="true" id="toolOrderButton" value="Tool Order" onclick="toolOrderPopup.show()" type="button"/>
        ...
    </h:form>
    <p:dialog header="Tool Order" severity="alert" widgetVar="toolOrderPopup"
                    appendToBody="true">
        <h:form id="second">
            <p:orderList id="toolOrderList" controlsLocation="right" value="#{toolBean.toolOrderList}" var="tool" itemLabel="#{tool}" itemValue="#{tool}" iconOnly="true"/>
            <p:commandButton ajax="true"  value="Save Order"
                             process="@this toolOrderList" 
                             actionListener="#{toolBean.setToolOrder}" oncomplete="toolOrderPopup.hide()"/>
            <p:commandButton value="Cancel" onclick="toolOrderPopup.hide()" type="button"/>
        </h:form> 
    </p:dialog>
</h:form>
Run Code Online (Sandbox Code Playgroud)

  • 如果在处理过程中没有服务器端更改,那么`update`是不必要的,应该在响应返回时反映出来.`process`是关键.它基本上指定了应该提交的输入.使用`@ this`基本上只调用按钮自己的动作,并且不会提交任何一个输入. (2认同)