当每次a4j:commandButton点击时,JSP Scriptlet元素是否应该被执行?

时间:2012-12-17 19:32:13

标签: jsp jsf

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

1 个答案:

答案 0 :(得分: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.
}

请注意,JSF 2.x中FacesContext#isPostback()的缩短方式,但由于您使用的是遗留JSP,我认为您还在使用旧版JSF 1.x。

另见:


自从几十年前的JSP 2.0以来,不鼓励使用 scriptlet 来解决具体问题

无关。建议在普通的Java类中执行该作业。例如。在支持bean的(post)构造函数中。您可以使用<a4j:keepAlive>在JSF 1.x请求范围的bean上模拟新的JSF 2.0视图范围。

另见: