2012-10-23 125 views
2

我有一个primefaces p:orderList,它在弹出的按钮上单击显示。当我更改订单列表中的项目顺序,并在弹出窗口上点击保存订单按钮时,我看不到具有更改顺序的列表。 PFB我的代码 -primefaces订单列表没有按更改的订单更新

<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> 

在豆:

public void setToolOrder(){ 
    System.out.println("toolOrderList-" + BeanStringConverter.convertToString(toolOrderList)); 
} 

请让我知道什么可能是错误的代码。

+0

第一格式的代码。 –

+0

弹出式窗口上的按钮 - 很抱歉,它被称为“保存顺序” – Raaz

回答

5

您需要处理p:orderlist得到orderList模型保存:

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

无关你的问题,你可能有这样的:

<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> 

如果是的话,那么看看primefaces医生说约appentToBody

小心使用appendToBody作为th e页面定义和html dom会有所不同,对于 示例,如果dialog位于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> 
+2

如果在处理过程中没有服务器端更改,那么在响应返回时应该反映出来的'update'是不必要的。 '进程'是关键。它基本上指定应该提交哪些输入。用'@ this'基本上只会调用按钮自己的动作,并且不会有任何一个输入被提交。 – BalusC

+0

我改变了代码,让process =“@ this toolOrderList”,并从p:dialog中删除了appendToBody =“true”,它就起作用了!谢谢akoskm和BalusC! – Raaz

+0

@BususC感谢您的澄清。我编辑了我的答案。 –