如何在加载页面时从ManagedBean获取MediaType(屏幕,手持设备等)?

时间:2016-06-06 20:11:06

标签: javascript jsf primefaces

我的应用程序中有一个JSF页面,其中包含使用PrimeFaces的表格。该表有一个ajax方法,应该在特定事件被触发时执行:
如果客户端浏览器来自移动设备(手持设备),则应触发ajax请求的事件必须为onSelect,否则(对于桌面)事件必须为onDblselect(双击)。< / p>

这是表格中的ajax:

<p:ajax event="rowDblselect" listener="#{productController.productSelect}" update=":mainForm" />

如您所见,现在的事件是固定的。我知道我可以使用javascript中的window.matchMedia('screen and (max-width: 765px)').matches命令获取设备类型,该命令返回truefalse。但是我怎么能把它绑定到事件上,因为&#34;事件&#34; ajax标签的属性不接受javascript代码?

1 个答案:

答案 0 :(得分:0)

我通过创建两个ajax侦听器来解决它,每个事件一个,并且通过onStart方法上的javascript取消了不适合特定设备的侦听器,如下所示:

<p:ajax event="rowDblselect" onstart="return !isMobileDevice();" listener="#{productController.productSelect}" update=":mainForm" />
<p:ajax event="rowSelect" onstart="return isMobileDevice();" listener="#{productController.productSelect}" update=":mainForm" />

isMobileDevice是一个简单的JS函数:

function isMobileDevice() {
    return window.matchMedia("screen and (max-width: 765px)").matches;
}