Jsf 在preRenderView侦听器上使用findComponent
在JSF页面上:Jsf 在preRenderView侦听器上使用findComponent,jsf,Jsf,在JSF页面上: <f:event type="preRenderView" listener="#{backingBean.test()}" /> <h:inputHidden id="inputHiddenId" value="dummy" /> phaseListener显示在呈现响应阶段调用test() START PHASE RESTORE_VIEW 1 END PHASE RESTORE_VIEW 1 START PHASE RENDER_RESPONSE
<f:event type="preRenderView" listener="#{backingBean.test()}" />
<h:inputHidden id="inputHiddenId" value="dummy" />
phaseListener显示在呈现响应阶段调用test()
START PHASE RESTORE_VIEW 1
END PHASE RESTORE_VIEW 1
START PHASE RENDER_RESPONSE 6
test
END PHASE RENDER_RESPONSE 6
但是,它没有找到InAuthidDenid组件。在这段时间内,该组件似乎不可用。它需要在回邮上吗?第一次加载页面时如何访问组件?对不起,我对JSF生命周期的复杂性不太熟悉。如果有人能解释这一点,我们将不胜感激
重新发布问题: 真正的问题是我有一个包含多个字段的表单。提交表单后,用户仍然可以编辑某些字段,这会重置表单上的其他部分并使其无效。因为它是一个长表单,所以即使验证失败,用户也应该能够保存表单,并在以后返回。因此,在加载页面时,我希望它在字段上显示内联验证。我们正在使用JBossSeam。验证方法使用以下命令显示错误:
StatusMessages.instance().addToControl("inputHiddenId", severity, message)
使用从page.xml调用验证方法
<action execute="#{backingBean.pageInitWithValidation()}" on-postback="false" />
但是,这不会在ui组件上内联显示错误消息
<s:div id="errorMessages">
<h:inputHidden id="inputHiddenId" value="dummy" />
<h:messages for="inputHiddenId" />
</s:div>
它显示在全局消息的顶部
<h:messages globalOnly="true" />
这就是为什么我尝试使用preRenderView,但效果相同
我目前正在使用第二种方法处理body onload事件和a4j:jsFunction,但它不是很干净
<a4j:jsFunction name="validate"
action="#{backingBean.validate()}" render="formId" />
<h:body onload="validate()">
我建议退后一步,询问如何正确解决您错误地认为这一切都是正确的解决方案的特定问题。另见。任何试图在支持bean中获取UI组件的尝试都是一种巨大的气味。是的,为了简单起见,我试图给出我实际问题的过滤版本。抱歉,我不知道该如何重新发布该问题,因此我将作为解决方案的一部分发布。请随意编辑。首先,ThanksIt不清楚您正试图用这种方法解决哪个问题,所以我无法解决您的问题。我所能做的就是发布上面的评论,并要求你退后一步。根据你的编辑,像
这样的东西应该适合你吗?或者将其移动到组件树的底部(并通过CSS将其定位为静态/绝对),然后改用redisplay=“false”
?我尝试移动到页面底部,但消息仍然显示在那里,而不是与组件内联。在这种情况下,我希望它在页面加载而不是回发时进行验证,因此消息必须在非回发时呈现。经过反思,表单验证可能需要以另一种方式处理。看见
<a4j:jsFunction name="validate"
action="#{backingBean.validate()}" render="formId" />
<h:body onload="validate()">