我正在尝试使用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。
答案 0 :(得分:3)
显然这是known bug。 valueChangeListener
的{{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