【问题标题】:p:commandButton doesn't execute f:setPropertyActionListener in JSF 2p:commandButton 在 JSF 2 中不执行 f:setPropertyActionListener
【发布时间】:2012-08-19 10:12:30
【问题描述】:

我使用 JSF2 和 PrimeFaces,我想用这个按钮转到另一个页面:

<p:column>
    <h:commandButton action="userCommand" value="list of commands" >
        <f:setPropertyActionListener value="#{car}" target="#{userController.u1}" />  
    </h:commandButton>
</p:column>

在目标页面上,我使用了来自userController.u1 的一些信息,但&lt;f:setPropertyActionListener&gt; 标记似乎没有被执行。

因此我得到以下异常:

java.lang.NullPointerException

作为对 Arjan 的回应,感谢您的详细回复,但我认为还有另一种方法可以做到这一点,而不是像我在问题中那样使用新的 managedBean,而是使用一个已经实例化的 (sessionScoped) 并且然后我在新的构造函数中调用它来检索值,

您如何找到此解决方案?你能帮我从新的 managedBean 的构造函数中调用另一个 managedBean 吗?

因为我测试过这个:

  ELContext elContext = context.getELContext();
    Application application = context.getApplication();
    String userid = (String) application.evaluateValueExpressionGet(context,
            "#{userBean.userid}", String.class);

但我对“上下文”有疑问。你有什么想法吗?

【问题讨论】:

    标签: button jsf-2 primefaces


    【解决方案1】:

    这取决于您如何为userCommand 设置相应的导航规则和/或userController 的范围(如果这会起作用)。

    动作监听器在导航发生之前在 bean 中设置一个值。如果导航导致发生重定向,则 bean 必须在此重定向后可用的范围内。在没有添加任何其他范围的情况下,这将是应用程序范围和会话范围。

    如果 bean 在请求范围或视图范围内,您的值将在重定向发生之前设置在与请求对应的 bean 中。在重定向到新页面的新请求完成后,新的请求范围或新的视图范围开始。这意味着您的价值将丢失。

    使用应用程序范围或会话范围理论上可以解决此问题,但如果您的应用程序有多个用户(很可能)或单个用户打开多个窗口/选项卡,您会遇到重大问题。

    如果您的导航规则使用重定向,它应该确实有效。现在的问题是你会遇到“一个 URL 后面的问题”:浏览器的地址栏仍然会显示旧页面。

    由于您并没有真正执行任何操作而只是想转到新页面,因此更好的方法是使用 &lt;h:button&gt;&lt;h:link&gt; 直接链接到该页面,并提供所述汽车的 If 作为参数。

    这将发出一个 GET 请求,它具有可收藏的额外好处。如果你在做 Post-Redirect 的事情,它最初也会表现得更好。在目标页面上,您必须准备好将参数转换回汽车实例。为此,您可以使用&lt;f:viewParam&gt; 标签。

    链接示例:

    <p:column>
        <h:button outcome="userCommand" value="list of commands">
            <f:param name="car_id" value="#{car.id}"/>
        </h:Button>
    </p:column>
    

    目标页面示例:

    <f:metadata>
        <f:viewParam name="car_id" value="#{userController.u1}" converter="#{carConverter}" />    
    </f:metadata>
    

    有关这方面的工作示例,请参阅 this 示例 CRUD 应用程序中的 index.xhtmluser_edit.xhtml

    【讨论】:

      猜你喜欢
      • 2013-06-24
      • 2013-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-19
      • 2011-05-31
      • 2012-07-24
      • 1970-01-01
      相关资源
      最近更新 更多