jsf - 使用 var 组件动态添加客户端行为
问题描述
我正在尝试从包含在 primefaces-extensions 的 DynaForm 中的组件中侦听事件,因此开发人员可以动态地做一些自定义的事情。最后,我希望能够做到这一点:
<pe:dynaForm id="dynaForm" value="#{dynaFormController.model}" var="data" controlKey="#{data.name}">
<pe:dynaFormControl type="input" for="txt">
<p:inputText id="txt" value="#{data.value}" required="#{data.required}" />
</pe:dynaFormControl>
<my:ajax event="keyup" listener="#{controller.authorSelected}" key="author"/>
</pe:dynaForm>
我想做的事:
每当定义的键my:ajax
与 a 的 controlKey 匹配时pe:dynaFormControl
,我想将my:ajax
客户端行为附加到p:inputText
.
遇到的问题:
起初,我在 EL 上下文中完成了所有这些DynaFormRenderer#encodeBody
,非常方便。var
但我最终遇到了这个异常(类似于这个https://github.com/javaserverfaces/mojarra/issues/4365):
java.lang.NullPointerException
at javax.faces.component.UIComponentBase.restoreBehaviors(UIComponentBase.java:2228)
at javax.faces.component.UIComponentBase.restoreBehaviorsState(UIComponentBase.java:2203)
at javax.faces.component.UIComponentBase.restoreState(UIComponentBase.java:1623)
at javax.faces.component.UIOutput.restoreState(UIOutput.java:286)
at javax.faces.component.UIInput.restoreState(UIInput.java:1422)
at com.sun.faces.application.view.FaceletPartialStateManagementStrategy$2.visit(FaceletPartialStateManagementStrategy.java:379)
at com.sun.faces.component.visit.FullVisitContext.invokeVisitCallback(FullVisitContext.java:151)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1689)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1700)
at javax.faces.component.UIForm.visitTree(UIForm.java:371)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1700)
at com.sun.faces.application.view.FaceletPartialStateManagementStrategy.restoreView(FaceletPartialStateManagementStrategy.java:366)
at com.sun.faces.application.StateManagerImpl.restoreView(StateManagerImpl.java:138)
at com.sun.faces.application.view.ViewHandlingStrategy.restoreView(ViewHandlingStrategy.java:123)
at com.sun.faces.application.view.FaceletViewHandlingStrategy.restoreView(FaceletViewHandlingStrategy.java:591)
at com.sun.faces.application.view.MultiViewHandler.restoreView(MultiViewHandler.java:151)
at javax.faces.application.ViewHandlerWrapper.restoreView(ViewHandlerWrapper.java:353)
at com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:199)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:123)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:658)
然后我尝试像o:moveComponent
从 Omnifaces 一样使用 PreRenderViewEvent,但此时 var 不可用,实际上调用DynaForm#getValue()
总是返回 null。
var
当出现在图片中时,您对如何正确地动态附加客户端行为有任何建议吗?
更多信息:Mojarra 2.2.15 和 Tomcat 8
解决方案
推荐阅读
- java - 有条件地从流中删除第一个(索引为零)元素
- python-3.x - randint 不想与 int 相乘,然后从 int 中减去
- python - Restplus API Application 对象不可调用?
- mongodb - MongoDB 创建一个包含 2 个集合数据的过滤集合
- reactjs - React JS 中 UseEffect 钩子的 Jest 测试用例
- java - 为什么1534236469不能通过
- react-final-form - 反应最终形式的问题
- python - 在 Google Colab 中运行 python 参数
- xml - 与元素类型“名称”关联的属性“{1}”应为开放引号
- python - 使用熊猫检查值存在于哪一列