Issue Details (XML | Word | Printable)

Key: SHALE-371
Type: Bug Bug
Status: Resolved Resolved
Resolution: Fixed
Priority: Major Major
Assignee: Craig McClanahan
Reporter: Stan Zapryanov
Votes: 0
Watchers: 0
Operations

If you were logged in you would be able to see more operations.
Shale

prerender() executes for ViewController not rendered when navigating to page/bean not implementing ViewController

Created: 22/Dec/06 12:01 AM   Updated: 23/Jan/07 04:40 PM
Component/s: View
Affects Version/s: 1.0.4-SNAPSHOT
Fix Version/s: 1.0.4

Environment: Windows XP Pro, Tomcat 5.5, JDK 1.5.0_04, MyFaces

Flags: Important


 Description  « Hide
Not sure if this is a bug but it looks like it.

When navigating to a view (JSF) not implementing the ViewHandler framework from a ViewController t(JSF/bean) that does, currently the prerender() method gets executed on the viewcontroller that you are leaving (that won't get rendered).

My guess is that currently the old FacesConstants.VIEW_NAME_RENDERED entry remains in the request map even though you are not rendering that viewconroller, and that triggers the execution of prerender().

Here is a suggested fix that appears to correct the problem described but I woudn't know if it may brake other stuff.. :

In the setupViewController() method of the ViewViewHandler class:


            vc = vr.resolveVariable(context, viewName);
            if (vc == null) {
                if (log.isDebugEnabled()) {
                    log.debug(messages.getMessage("view.noViewController",
                                                  new Object[] { viewId, viewName }));

                }
// ---- START OF PROPOSED FIX
             context.getExternalContext().getRequestMap() .remove(FacesConstants.VIEW_NAME_RENDERED);
//------END OF FIX-------
                return;
            }

Hope all makes sense and was helpful.

Cheers!



 All   Comments   Change History   Subversion Commits      Sort Order: Ascending order - Click to sort in descending order
Repository Revision Date User Message
ASF #489557 Fri Dec 22 05:23:13 UTC 2006 craigmcc Add test cases for navigating from a ViewController to a non-ViewController
page, for both the standard and Tiger extensions implementations. So far, we
cannot duplicate the reported error condition in SHALE-371 but these tests will
help avoid any future regressions in this area.
Files Changed
MODIFY /shale/framework/trunk/shale-apps/shale-test-tiger/src/main/webapp/menu.jsp
ADD /shale/framework/trunk/shale-apps/shale-test-tiger/src/main/webapp/nonview1.jsp
ADD /shale/framework/trunk/shale-apps/shale-test-tiger/src/main/webapp/nonview2.jsp
MODIFY /shale/framework/trunk/shale-apps/shale-test-tiger/src/test/java/org/apache/shale/examples/test/tiger/systest/IntegrationTestCase.java
MODIFY /shale/framework/trunk/shale-apps/shale-test-tiger/src/main/webapp/WEB-INF/faces-config.xml
ADD /shale/framework/trunk/shale-apps/shale-test-view/src/main/java/org/apache/shale/examples/test/view/Nonview2.java
ADD /shale/framework/trunk/shale-apps/shale-test-view/src/main/java/org/apache/shale/examples/test/view/Nonview1.java
MODIFY /shale/framework/trunk/shale-apps/shale-test-view/src/main/webapp/menu.jsp
ADD /shale/framework/trunk/shale-apps/shale-test-view/src/main/webapp/nonview1.jsp
MODIFY /shale/framework/trunk/shale-apps/pom.xml
ADD /shale/framework/trunk/shale-apps/shale-test-view/src/main/webapp/nonview2.jsp
MODIFY /shale/framework/trunk/shale-apps/shale-test-view/src/main/webapp/WEB-INF/faces-config.xml
ADD /shale/framework/trunk/shale-apps/shale-test-tiger/src/main/java/org/apache/shale/examples/test/tiger/Nonview2.java
ADD /shale/framework/trunk/shale-apps/shale-test-tiger/src/main/java/org/apache/shale/examples/test/tiger/Nonview1.java
MODIFY /shale/framework/trunk/shale-apps/shale-test-view/src/test/java/org/apache/shale/examples/test/view/systest/IntegrationTestCase.java

Repository Revision Date User Message
ASF #489925 Sat Dec 23 20:51:40 UTC 2006 craigmcc Add an additional use case for each test application to further exercise the
scenario reported in SHALE-371 -- this time, the destination bean is not
registered with a ViewControllerMapper compatible managed bean name at all.
Files Changed
MODIFY /shale/framework/trunk/shale-apps/shale-test-tiger/src/main/webapp/menu.jsp
MODIFY /shale/framework/trunk/shale-apps/shale-test-tiger/src/test/java/org/apache/shale/examples/test/tiger/systest/IntegrationTestCase.java
ADD /shale/framework/trunk/shale-apps/shale-test-tiger/src/main/webapp/nonview3.jsp
ADD /shale/framework/trunk/shale-apps/shale-test-tiger/src/main/webapp/nonview4.jsp
MODIFY /shale/framework/trunk/shale-apps/shale-test-view/src/main/webapp/WEB-INF/faces-config.xml
ADD /shale/framework/trunk/shale-apps/shale-test-view/src/main/java/org/apache/shale/examples/test/view/Nonview4.java
ADD /shale/framework/trunk/shale-apps/shale-test-view/src/main/java/org/apache/shale/examples/test/view/Nonview3.java
MODIFY /shale/framework/trunk/shale-apps/shale-test-tiger/src/main/webapp/WEB-INF/faces-config.xml
MODIFY /shale/framework/trunk/shale-apps/shale-test-view/src/main/webapp/menu.jsp
MODIFY /shale/framework/trunk/shale-apps/shale-test-tiger/src/main/java/org/apache/shale/examples/test/tiger/Lifecycle2.java
MODIFY /shale/framework/trunk/shale-apps/shale-test-tiger/src/main/java/org/apache/shale/examples/test/tiger/Lifecycle1.java
ADD /shale/framework/trunk/shale-apps/shale-test-view/src/main/webapp/nonview3.jsp
ADD /shale/framework/trunk/shale-apps/shale-test-view/src/main/webapp/nonview4.jsp
ADD /shale/framework/trunk/shale-apps/shale-test-tiger/src/main/java/org/apache/shale/examples/test/tiger/Nonview4.java
ADD /shale/framework/trunk/shale-apps/shale-test-tiger/src/main/java/org/apache/shale/examples/test/tiger/Nonview3.java
MODIFY /shale/framework/trunk/shale-apps/shale-test-view/src/test/java/org/apache/shale/examples/test/view/systest/IntegrationTestCase.java

Repository Revision Date User Message
ASF #489926 Sat Dec 23 20:56:29 UTC 2006 craigmcc Fix the case reported in SHALE-371 (after further discussion) such that, when
you navigate from a ViewController view to a view that does not have a managed
bean name matching the rules in ViewControllerMapper, the prerender() method
on the originating view was mistakenly getting called. Thanks to Stan
Zapryanov for the patch, and the diligent evaluation to provide a reproducible
test case.
Files Changed
MODIFY /shale/framework/trunk/shale-view/src/main/java/org/apache/shale/view/faces/ViewViewHandler.java