OrderList事件未触发?

时间:2013-11-05 17:01:35

标签: jsf jsf-2 primefaces

我正在尝试使用PrimeFaces v 3.5 libarary中的OrderList

<p:orderList 
    id="outputMapId" 
    value="#{JobMgmtBean.selectedStreamNames}" 
    var="stream" 
    valueChangeListener="#{JobMgmtBean.listenerListChanged}" 
    controlsLocation="none" 
    itemLabel="#{stream}" 
    itemValue="#{stream}">
 </p:orderList>

public void listenerListChanged( )
{
    ..
}

在拖放项目后,我似乎无法获得值更改事件,listenerListChanged永远不会被执行。我究竟做错了什么?

修改 试试这个脚本:

<h:head>
<meta http-equiv="content-type" content="text/html;charset=iso-8859-1"/>
<title>#{txt.TXT_TITLE_TRANSCODING}</title>
<link rel="stylesheet" type="text/css" href="scripts/styles.css"/>
<link rel="shortcut icon" href="./images/favicon.ico"></link>
<script src="./scripts/scripts.js" type="text/javascript"/>

<script>
$(document).ready(function() {
        console.log("Entered script!");
        var isDragging = false;
        $(".ui-orderlist-item")
        .mousedown(function () {
            $(window).mousemove(function () {
                isDragging = true;
                        console.log("Mouse down!");
            });
         })
         .mouseup(function () {
             var wasDragging = isDragging;
             isDragging = false;
                     console.log("Mouse up!");
             triggerBackEnd();
          }); 
    }); 
</script>
</h:head>
    <h:body>
    <f:view>
    <h:form>
        <p:remoteCommand name="triggerBackEnd" actionListener="#{JobMgmtBean.listenerListChanged}"></p:remoteCommand>
    ...

但这仍然无效。 我永远不会得到console.log("Mouse down!");

我正在使用PrimeFaces 3.5.0附带的jQuery v1.8.3。

1 个答案:

答案 0 :(得分:3)

显然这是known bugvalueChangeListener的{​​{1}}属性目前无效。因此,我决定通过javascript使其工作,并受到that answer的启发。

当您调查生成的p:orderList的html代码时,您会看到列表项的css类为p:orderList。所以;感谢jQuery,您可以轻松地检测拖放事件:

.ui-orderlist-item

我们所做的是:当我们的列表项目被删除时,调用$(function () { var isDragging = false; $(".ui-orderlist-item") .mousedown(function () { $(window).mousemove(function () { isDragging = true; }); }) .mouseup(function () { var wasDragging = isDragging; isDragging = false; triggerBackend(); }); }); 将引用triggerBackend()。如果要检测拖动事件,则应考虑p:remoteCommand,这需要更多编码。

然后mousedown

triggerBackend()

它适用于我的PF 3.5,jQuery 1.8.3