0

我正在尝试使用OrderListPrimeFaces v 3.5 库。

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

4

1 回答 1

3

显然这是一个已知的错误。当前不工作valueChangeListener的财产。p:orderList所以我决定通过 javascript 让它工作并从那个答案中得到启发。

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

$(function () {
    var isDragging = false;
    $(".ui-orderlist-item")
    .mousedown(function () {
        $(window).mousemove(function () {
            isDragging = true;
        });
     })
     .mouseup(function () {
         var wasDragging = isDragging;
         isDragging = false;
         triggerBackend();
      }); 
 }); 

我们所做的是:调用triggerBackend()which 将p:remoteCommand在我们的列表项删除时引用 a。如果你想检测拖动事件,你应该考虑mousedown这需要更多的编码。

然后triggerBackend()

<p:remoteCommand name="triggerBackEnd" action="#{JobMgmtBean.listenerListChanged}"></p:remoteCommand>

它适用于我 PF 3.5、jQuery 1.8.3

于 2013-11-06T13:01:50.833 回答