开发者

How to design JSF entry point page with conditional navigation logic before the page displays?

开发者 https://www.devze.com 2023-03-31 13:22 出处:网络
The entry point to my JSF application is EntryPoint开发者_开发技巧.jsp.We are using JSF 1.2.The user may call EntryPoint.jsp with a number of different URL parameters.I woud like to parse these parame

The entry point to my JSF application is EntryPoint开发者_开发技巧.jsp. We are using JSF 1.2. The user may call EntryPoint.jsp with a number of different URL parameters. I woud like to parse these parameters, load up a session bean with some state, do all this before the page loads and either continue processing/display EntryPoint.jsp or foward/redirect to another page in the application. Can anyone recommend the best design for this?

I've tried in my EntryPoint.java backing bean (exception handling removed):

@PostConstruct
public void init() {
    HttpServletRequest request = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
    companyName = request.getParameter("companyCode");
    //process parameters...
    if (someCondition) {
        FacesContext.getCurrentInstance().getExternalContext().dispatch("/other.jsp");
        return;
    }
 }

but I get an IllegalStateException: Response already committed.

I've also tried

FacesContext.getCurrentInstance().getExternalContext().redirect("/other.jsp");

but also get an IllegalStateException (with no message). Clearly this isn't the appropiate way or place to do this. Can anyone recommend a better way to achieve what I am looking for?

This post seems to suggest a servlet filter might be a good choice. If so, would the session scope JSF backing bean be available in the servlet filter?


This is indeed not going to work for JSF 1.x. As you found in the other question, a Filter is indeed a more appropriate place for this job. This answer has not been changed since then. A session scoped JSF managed bean is stored in the HttpSession with the managed bean name as session attribute name. So yes, it's accessible in the Filter. Even more, the Filter could precreate it and put it in the session. JSF will then use it instead of autocreating one.

0

精彩评论

暂无评论...
验证码 换一张
取 消