3

To model the situation, let's say that I have two visual force pages, which use the same controller. Let's call them PageStart and PageEnd. PageStart uses action attribute for apex:page element. Inside this action some properties are set and then PageEnd reference is returned. But when I try to display values of these properties right on PageEnd, I've got NullPointer exception, i.e. values are lost when moving from PageStart to PageEnd. It looks like new controller instance is created for PageEnd.

So, my question is: what kind of redirect happens when we return some page from apex:page action attribute's method ? Is it always external redirect even if I'm returning another page which uses exact the same controller ? Can I somehow force it to be internal redirect and keep state (set redirect to false on page ref doesn't help).

Any suggestions would be appreciated, and thanks in advance for you help guys.

6
  • generally we setRedirect = false to preserve controller state. Not setRedicrect(true).
    – Ashwani
    Commented Aug 22, 2015 at 18:10
  • yep, sorry that was misprint in my text, of course to false. It doesn't help in described scenario.
    – wesaw
    Commented Aug 22, 2015 at 18:27
  • can you post the method which does redirection
    – Ashwani
    Commented Aug 22, 2015 at 18:37
  • it's very simple, like this: public PageReference redirectToEnd() { x = 'test value'; PageReference pageRef = Page.PageEnd; pageRef.setRedirect(false); return PageRef; }
    – wesaw
    Commented Aug 22, 2015 at 18:43
  • If you are redirecting user as soon as it land on page the view state may not be constructed and variable may not be set. Either put the variable in <apex:form> input tag or use it as parameter in pagereference url
    – Ashwani
    Commented Aug 22, 2015 at 18:51

1 Answer 1

1

See creating a wizard for details on how it works. Basically, it works as long as both pages use the same standard controllers, custom controllers, and/or extensions, and the redirect flag is false, which actually happens to be the default. Make sure both pages are using the same set of values in the apex:page attributes.

2
  • Yep, I'm aware of all these stuff. I've conducted a small experiment, just copied the content of PageStart to PageEnd, so basically got two exactly same pages. Then I just added apex:outputText to PageEnd displaying property initialized on PageStart. It's still null. So external redirect happens not because of page attributes mismatching. I have a suspicious that it's always like that in the case apex:page action attribute returning non-null page.
    – wesaw
    Commented Aug 23, 2015 at 11:27
  • One more experiment: added button on PageStart which calls exactly the same action as it was for apex:page action attribute. So clicking on the button issues internal redirect to PageEnd and property is NOT NULL. So looks like the problem is not with pages, it's with redirecting using apex:page action attribute approach. I just can't find prove in official documentation that only external redirects could be triggered this way.
    – wesaw
    Commented Aug 23, 2015 at 11:30

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .