1

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

4

1 回答 1

1

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

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

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 以来不鼓励使用scriptlet 。建议在普通 Java 类中执行该作业。例如,在支持 bean 的(后)构造函数中。您可以使用<a4j:keepAlive>在 JSF 1.x 请求范围 bean 上模拟新的 JSF 2.0 视图范围。

也可以看看:

于 2012-12-17T23:46:31.893 回答