【问题标题】:Should JSP Scriplet Element get executed when a4j:commandButton clicked each time?每次单击 a4j:commandButton 时是否应该执行 JSP Scriptlet Element?
【发布时间】:2012-12-17 19:32:13
【问题描述】:

我有一个 jsp 页面,在该页面的顶部有一个 scriplet 元素。在 f:view 和 h:form 标签之后的正文中,我有 a4j:commandButton,我在其中提供操作。现在,当我每次执行 scriplet 元素时按下 a4j:commandButton 时,它是我对服务器的 ajax 调用。这是正常行为还是我做错了什么。

【问题讨论】:

    标签: jsp jsf


    【解决方案1】:

    JSP scriptlets 是由于在 JSF 视图构建期间执行的遗留 JSP 视图技术的性质(因此,也在回发的恢复视图阶段)。所以是的,这绝对是预期的行为。

    您听起来好像只想在初始 GET 请求中执行一些 Java 代码,而不是在随后的回发中。在这种情况下,如果ResponseStateManager#isPostback() 返回false,请检查scriptlet

    FacesContext context = FacesContext.getCurrentInstance();
    
    if (!context.getRenderKit().getResponseStateManager().isPostback(context)) {
        // Not a postback. Do your job here.
    }
    

    请注意,FacesContext#isPostback() 在 JSF 2.x 中有更短的方法,但由于您使用的是旧版 JSP,我假设您仍在使用旧版 JSF 1.x。

    另见:


    与具体问题无关,自十年前的 JSP 2.0 以来,不鼓励使用 scriptlets。建议在普通的 Java 类中执行该作业。例如。在支持 bean 的(后)构造函数中。您可以使用<a4j:keepAlive> 在 JSF 1.x 请求范围 bean 上模拟新的 JSF 2.0 视图范围。

    另见:

    【讨论】:

      猜你喜欢
      • 2011-08-31
      • 2022-08-08
      • 2012-04-16
      • 2017-10-11
      • 2012-04-23
      • 1970-01-01
      • 2013-01-26
      • 2019-12-29
      • 2012-01-23
      相关资源
      最近更新 更多