使用PrimeFaces的p:poll组件出现Long类型不支持异常该如何解决?
异常原因
p:poll 组件的 interval 属性仅支持 Integer 类型 入参,而 session.maxInactiveInterval 返回值为 java.lang.Long 类型,你在表达式中执行减法运算后返回值仍为 Long 类型,与组件要求的参数类型不匹配,因此触发类型不支持异常。
解决方案
你可以任选以下任意一种方案适配参数类型:
方案1:直接在EL表达式中完成类型转换
若你使用的EL版本支持as语法,可直接修改<p:poll>代码为:<p:poll interval="#{session.maxInactiveInterval - 10 as Integer}" async="true" />若不支持
as语法,可调用Integer.valueOf方法转换:<p:poll interval="#{Integer.valueOf(session.maxInactiveInterval - 10)}" async="true" />部分高版本EL也支持直接强转int:
<p:poll interval="#{(int)(session.maxInactiveInterval - 10)}" async="true" />方案2:后台Bean提前计算轮询间隔
先在对应业务Bean中新增Integer类型的轮询间隔属性,提前完成类型转换:import javax.annotation.PostConstruct; import javax.faces.context.FacesContext; // 省略类的其他代码 private Integer pollInterval; @PostConstruct public void init() { int sessionTimeout = FacesContext.getCurrentInstance().getExternalContext().getSessionMaxInactiveInterval(); pollInterval = sessionTimeout - 10; } public Integer getPollInterval() { return pollInterval; }再修改前端
<p:poll>代码引用该属性即可:<p:poll interval="#{xmlUploadBean.pollInterval}" async="true" />
内容的提问来源于stack exchange,提问作者CaptainB
相关产品推荐
相关产品推荐

