2011-03-08 64 views
1

我有一个<h:selectOneListbox>填充<s:selectItems>,它只是附加到我的Seam对象上的列表属性。这是我(简化)JSF代码:JSF - h:selectOneListbox - 如何上下移动项目

<a4j:outputPanel ajaxRendered="true" id="valuesListPanel"> 
    <table border="0" cellspacing="5"> 
     <tr><td rowspan="5"> 
     <h:selectOneListbox id="pickValue" value="#{seamObject.selectedValue}"> 
      <s:selectItems value="#{seamObject.propertyValues}" var="properties" label="#{properties}" /> 
     </h:selectOneListbox> 
     </td> 
     <td><a4j:commandButton value="Move Up" 
        action="#{seamObject.moveUp}"/></td></tr> 
     <tr><td><a4j:commandButton value="Move Down" action="#{seamObject.moveDown}"/></td></tr> 
    </table> 
</a4j:outputPanel> 

的为moveUp和下移方法在Seam对象发现在后台列表中选中的项目,将其向上或向下。

这里是我遇到的问题:当我点击这些按钮中的一个,AJAX请求获得通过,并支持对象确实发生了改变。但是,列表不会更新。第二次点击其中一个按钮,但是,以前的更改反映在列表框中。

因此,如果我“向下移动”一个项目,则不会显示任何更改。然而,如果我“移动”另一个物品,那个物品没有任何反应,但是我之前想要移动的物品向下移动。

迫使另一AJAX请求“作品”,与第二请求打掉,都应该要表现出任何FacesMessages异常黑客这一点。

我该如何得到这个工作?有没有更好的方法来解决这个问题?

回答

1

我结束了两个A4J将立即=“真”:CommandButton控件。这与在列表框的onchange事件上放置AJAX调用(以便服务器知道所选项目是什么)相结合,给了我所需的行为。这不是很美,但它有效,我不能花费更多的时间在它上面。

2

是否有您不使用rich:orderingList一个特别的原因?订购清单正是它的目的。

如果你不能做到这一点,是什么a4j:log说?面板是否会重新渲染?如果是,用什么数据?

+0

富有:ordersList看起来很有希望。我会让你知道它是否有效。 +1 – iandisme 2011-03-09 15:20:11

+0

我想我会去探索其他选项。富人:ordersList看起来像是一个很好的工具,但是为了把这个放在......好吧,这只是给了我意志,而将现有列表背后的意大利面解开。尽管如此,我一定会用它来解决未来的问题。谢谢! – iandisme 2011-03-09 16:00:31

+0

a4j:日志表示列表框正在重新渲染。但是,这些项目在响应中顺序错误。 – iandisme 2011-03-09 16:38:18