繁体   English   中英

从JSF中的请求ManagedBeans传递数据

[英]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() (如果已绑定按钮)。

此外,奇怪的是有一个名为initactionListener方法。 由于不需要事件,因此可以将action设置为将执行编辑操作的方法,并使该方法返回所需的导航规则。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM