最近使用JSF2.0+PrmeFaces3.4 Spring 做系统,但是用到树的操作的时候出现 很多问题,不过哥都一一解决了
一、View域。Sping中没有View域,可是老大又不让用ViewScope。他说会影响Spring,也就不使用了,不过确实需要怎么办呢,那就用Request代替吧,但是Request是不没有记忆 的,那上下文怎么连续的呢,这个,经过无数次的尝后,终于有点心得:
1、前台页面中保存唯一标识。
2、后台Action。构造函数中根据提交的唯一标识去Session中寻找上次提交保存的东西,恢复即可。
关键代码:前台隐藏唯一标识:
<input id="hiddenDeviceId" name="hiddenDeviceId" type="hidden" value="asdfghjkl" />
<script type="text/javascript">
var selectedTabname = $('#layoutTabView ul li[aria-expanded=true] a', window.parent.document).html();
$('#hiddenDeviceId').val(selectedTabname);
</script>
后台构造函数:
if (getRequest().getParameter("hiddenDeviceId") != null) {// 标识为非第一次a
deviceId = getRequest().getParameter("hiddenDeviceId");
} else if (getRequest().getParameter("panelHiddenDeviceId") != null) {// 标识为非第一次a
deviceId = getRequest().getParameter("panelHiddenDeviceId");
}
二、树左右击不能同时使用
PrimeFaces 的树左右键不能同时使用,这个坑死爹 了,不过有解决办法。步骤如下:
1、页面全局取得左右击中事件,将信息保存
2、树Select事件提交时检测左右击事件,若右键,则不提交即可。
上代码:
取得左右击中事件
<script>
var point = 1;
document.οnmοusedοwn=judgeMouseButton;
function judgeMouseButton(e){
var e=window.event||e;//获取事件对象
var value=e.button;
if(value==2||value==3){//右键
point = 1;
}else{//左键
point = 2;
}
}
</script>
树Select事件提交
<p:ajax event="select" onstart="if(point==1) return false"
listener="#{devicegroupAction.onNodeSelect}"
update=":form:accordionPanel:cpegroupTree">
</p:ajax>