我有一个jsp页面,我在jsp页面的顶部有一个scriplet元素。在f:view和h:form标签之后,我在a4j:commandButton中提供动作。现在,当我按下a4j:commandButton时,每次执行scriplet元素时,它都是我对服务器的ajax调用。这是正常的行为,还是我犯了一些错误。
答案 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。
无关。建议在普通的Java类中执行该作业。例如。在支持bean的(post)构造函数中。您可以使用<a4j:keepAlive>
在JSF 1.x请求范围的bean上模拟新的JSF 2.0视图范围。