在我的JSF应用程序中,一些值设置为requestScope,一些设置在sessionScope中。例如,如果您正在预订,则DTO将保存在sessionScope中,以便在下一页和之后成功提交预订后可用。因此,用户可以将预订保存为下一页中的模板,并在将来使用该模板。保存模板后,用户将被重定向到主页。这些预订值保存在会话范围内,但只有在requestScope中设置的succssfull提交页面时才需要其他值。所以requestScope在加载这个页面时做了必要的工作。然后我遇到了一个问题,即如果用户使用已经可用的名称作为模板另存为,则在检入辅助bean中的数据库后,页面应返回到具有错误消息的同一页面,而不是转发到主页。由于预订值保存在sessionScope中,因此不存在问题。但是保存在requestScope中的其他值会丢失,并且会在jsp页面中出现nullPointerException。有没有什么办法可以实现我的任务,而不用其他值使用sessionScope。我认为的一种方法是使用jsp中的postrender函数在backing bean中再次设置这些requestcope值。但我不确定请求值是否可用于postrender。有人可以帮助我吗?我如何使请求范围可用于jsf中的多个请求?
回答
尽管问题中缺少此信息,但我会假设您仍然使用旧版JSF 1.x,但不能将migrate添加到提供新版本view scope的JSF 2.x中,否则您不会已经问过这个问题。 IBM标签的存在也暗示了一些传统怪物的情况。
获取用于JSF 1.2的Tomahawk,并在视图中的任何位置引用请求范围bean的<t:saveState>
。
<t:saveState value="#{managedBeanName}" />
就是这样。这与新的JSF 2.0视图范围完全相同。所以这样你的#{managedBeanName}
实例就变成了一个视图范围的bean。
如果您使用的是JSF 2,那么您可以使用@ViewScoped注释使您的bean在用户处于相同视图时处于活动状态。
如果您使用JSF 1.2,则必须使用第三方库来处理这个问题。我只知道两种选择:
从Tomahawk库,你可以使用
<t:stavestate>
组件。从RichFaces 3.3.x开始,您可以使用
<a4j:keepAlive>
组件或作为类中的注释。我已经与这一个合作,这是非常有帮助的。我会让你举个例子。
在faces-config.xml文件中使用RequestScope配置的托管bean。
@KeepAlive
public class Bean {
private String name;
//constructor...
//getters and setters...
}
你的JSP/Facelets的页面:
<h:form>
<h:outputText value="Write your name" />
<h:inputText value="#{bean.name}" />
<br />
<a4j:commandButton value="Say hello!" reRender="hello" />
</h:form>
<!-- Since this is outside the form, the #{bean.name} value won't be send to the server -->
<h:outputText value="#{'Hello ' + bean.name}" id="hello" />
@BalusC是的,你们是对的,我们使用的是JSF 1.2和IBM jsf。我没有选择,只能使用它,因为我没有做出任何决定。这不仅仅是bean,还有一些其他值也被放入requestScope中,例如getRequestScope().put("showActualStatus", "true")
点击转发页面中的某些命令后,我需要这些值。我不需要bean的范围,只需要传递给转发页面的值。我决定把它们放在会话范围内并使用这些值。 –
techtabu
- 1. JSF中的请求范围
- 2. JSF请求范围形式
- 3. 用GET参数JSF请求范围
- 4. JSF请求范围Bean将根据请求创建新的bean
- 5. JSF:刷新请求范围属性AJAX请求后
- 6. 当请求范围不可用时,请求作用域bean singleton
- 7. 具有多个HTTP请求范围
- 8. 范围内的HTTP请求
- 9. 在Log4J的请求范围
- 10. 416请求的范围不可满足
- 11. Microsoft Graph Excel API - 请求不能用于多个范围
- 12. 使用请求范围豆功能在JSF
- 13. 如何检查Spring中的请求范围可用性?
- 14. 范围请求cxf jaxrs
- 15. Spring Rest Web请求范围
- 16. OAuth2请求其他范围
- 17. 弹簧请求范围bean
- 18. 在请求中处理Window.open在jsf中的范围
- 19. 我可以做多个SQL请求作为一个请求
- 20. Jsf Haning请求
- 21. JSF:初始请求和回发请求?
- 22. 如何让我的请求数据到我的$范围
- 23. jQuery AJAX请求中的变量范围?
- 24. jQuery的CORS请求不发送工作范围请求
- 25. 206部分请求 - 重叠字节的单范围请求
- 26. Guice请求跟踪请求工作流的范围
- 27. jsf 2.0 spring 3范围请求不起作用
- 28. 如何使用小于请求的CompletionHandlers和ByteBuffer读取请求?
- 29. 如何在加入请求Laravel中使用查询范围?
- 30. JSF中的HTTP请求
我不知道如果我完全理解你正试图在这里完成的任务,但将'@ ViewScoped'为你服务吗? http://balusc.blogspot.nl/2010/06/benefits-and-pitfalls-of-viewscoped.html – Aquillo
其次,我假设您正在使用JSF 1.2,因为您正在使用JSP页面? – Aquillo