[英]Passing data from request ManagedBeans in JSF
对于“ request”类型的ManagedBeans的生命周期,我有些困惑。
在此示例中,我使用一个请求bean“ userBean”填充此页面,并使用一个请求bean“ userEditBean”填充以下编辑页面。
<h:form>
<h:panelGrid border="1" columns="2">
<h:outputText value="Name" />
<h:outputText value="#{userBean.user.name}" />
...
</h:panelGrid>
<h:commandButton value="Edit" action="edit" actionListener="#{userEditBean.init}">
<f:attribute name="user" value="#{userBean.user}"/>
</h:commandButton>
</h:form>
当我按下“编辑”按钮时,将创建一个userEditBean,但属性映射将“ user”解析为null。
这是否意味着在销毁userBean之后解析属性EL? 如何将值从传入的Bean传递到传出的Bean?
您正在使用表达式设置属性值,而不是静态值。 每当您请求该值时,该表达式将再次被重新求值。 userBean.user
显然不在后续请求中。 您需要确保它在那里(换句话说, userBean
的构造userBean
应确保已创建并设置了user
。
但是,还有其他选择。 最好的方法之一就是使用Tomahawk的<t:saveState>
。 将其添加到页面中的某个位置:
<t:saveState value="#{userBean.user}" />
也就是说,我同意博佐的观点,即整个方法有点奇怪,但这是另一回事了。 但是,您可能会从以下任何一篇文章中获得许多有用的想法: JSF中的通信和/或Using Datatables 。 祝好运。
request
范围是指Bean在一个请求中存在。 然后,填写您的编辑页面(第一个请求),然后发送已编辑的用户(第二个请求)。
除此之外, <f:attribute>
在父组件中而不是request
设置tha属性。 因此,在代码中,属性将在button.getAttributes()
(如果已绑定按钮)。
此外,奇怪的是有一个名为init
的actionListener
方法。 由于不需要事件,因此可以将action
设置为将执行编辑操作的方法,并使该方法返回所需的导航规则。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.