Skip to content
This repository has been archived by the owner on Sep 5, 2023. It is now read-only.

Need method to map viewId to resource path #719

Closed
glassfishrobot opened this issue Jan 11, 2010 · 28 comments
Closed

Need method to map viewId to resource path #719

glassfishrobot opened this issue Jan 11, 2010 · 28 comments

Comments

@glassfishrobot
Copy link

The current JSF specification does not provide a standard plugable mechanism for
mapping a viewId to the resource path for the resource that will render the
view. Although the specification doesn't state that the requested viewId be
literally the resource path of the VDL document some parts of the RI assume this
with code similar to:

String viewId = FacesContext.getViewRoot().getViewId();
Object resource = externalContext.getResource(viewId);

This breaks applications that want to have some type of indirection or mapping
between viewIds and physical resources (e.g. viewId "/x/y/z" is rendered using
document "/a/b/foo.jspx").

Apache Trinidad solves this problem with a plugable interface called a
PageResolver (see
http://myfaces.apache.org/trinidad/trinidad-api/apidocs/index.html). This may
server as an model for how to provide this capability in the standard.

Environment

Operating System: All
Platform: All

Affected Versions

[2.0]

@glassfishrobot
Copy link
Author

Reported by daschneider

@glassfishrobot
Copy link
Author

Issue-Links:
blocks
JAVASERVERFACES_SPEC_PUBLIC-809
is related to
JAVASERVERFACES-2401

@glassfishrobot
Copy link
Author

@edburns said:
cat2

@glassfishrobot
Copy link
Author

@edburns said:
frame

@glassfishrobot
Copy link
Author

@edburns said:
These are targeted at 2.1.

@glassfishrobot
Copy link
Author

sheetalv said:
triage

@glassfishrobot
Copy link
Author

@edburns said:
edburns

@glassfishrobot
Copy link
Author

@edburns said:
Change target milestone.

@glassfishrobot
Copy link
Author

@edburns said:
Move back to GlassFish 3.1 M4

@glassfishrobot
Copy link
Author

@edburns said:
Put ADF stuff in keywords, not status_whiteboard

@glassfishrobot
Copy link
Author

@edburns said:
Per 20100810 scrum, move to M5

@glassfishrobot
Copy link
Author

@edburns said:
Move to 2.2.

@glassfishrobot
Copy link
Author

@edburns said:
Issue #719 asks for something like Apache
Trinidad PageResolver to be added to the JSF 2.2 spec. This issue is
linked to #809. I'm trying to discover how
best to proceed on these two linked issues and I think the key lies in
re-learning how we use ExternalContext.getResource().

Here are the usages that I have discovered thus far:

Usage1: During RestoreViewPhase when trying to load a page to get its
<f:metadata> section.

Usage2: When trying to render a button whose action uses conditional
navigation.

Usage3: When trying to get the viewId on an initial page request.

Usage4: When trying to serve up a resource request from the filesystem.

Usage5: When trying to find a ScriptComponent Resource for a Composite
Component.

Usage6: When trying to render out the markup for a stylesheet reference
in the HEAD.

There may be others, possibly from the application space as well.

Both 719 and 809 want some kind of API to allow loading resources.
Before proceeding, I want to get people to weigh in to say that the
existing API, decorating the ExternalContext and overriding
getResource(), is not sufficient. Why is it not sufficient?

@glassfishrobot
Copy link
Author

@edburns said:
snapshot

@glassfishrobot
Copy link
Author

File: 20120307-0002-i_spec_719_snapshot.patch
Attached By: @edburns

@glassfishrobot
Copy link
Author

@edburns said:
Sending jsf-ri/src/main/java/com/sun/faces/application/ApplicationAssociate.java
Sending jsf-ri/src/main/java/com/sun/faces/application/resource/ClasspathResourceHelper.java
Adding jsf-ri/src/main/java/com/sun/faces/application/resource/ClientResourceInfo.java
Adding jsf-ri/src/main/java/com/sun/faces/application/resource/FaceletResourceHelper.java
Adding jsf-ri/src/main/java/com/sun/faces/application/resource/FaceletResourceInfo.java
Adding jsf-ri/src/main/java/com/sun/faces/application/resource/Resource.java
Sending jsf-ri/src/main/java/com/sun/faces/application/resource/ResourceHelper.java
Sending jsf-ri/src/main/java/com/sun/faces/application/resource/ResourceImpl.java
Sending jsf-ri/src/main/java/com/sun/faces/application/resource/ResourceInfo.java
Sending jsf-ri/src/main/java/com/sun/faces/application/resource/ResourceManager.java
Sending jsf-ri/src/main/java/com/sun/faces/application/resource/WebappResourceHelper.java
Sending jsf-ri/src/main/java/com/sun/faces/facelets/impl/DefaultResourceResolver.java
Deleting jsf-ri/src/main/java/com/sun/faces/facelets/util/Resource.java
Sending jsf-ri/test/com/sun/faces/application/resource/TestResourceManager.java
Transmitting file data .............
Committed revision 9748.

@glassfishrobot
Copy link
Author

File: 20120309-0034-i_spec_719.patch
Attached By: @edburns

@glassfishrobot
Copy link
Author

@edburns said:
Sending jsf-api/src/main/java/javax/faces/application/ResourceHandler.java
Sending jsf-ri/build-tests.xml
Adding jsf-ri/src/main/java/com/sun/faces/application/resource/FaceletLibraryInfo.java
Sending jsf-ri/src/main/java/com/sun/faces/application/resource/FaceletResourceHelper.java
Sending jsf-ri/src/main/java/com/sun/faces/application/resource/ResourceManager.java
Sending jsf-ri/src/main/java/com/sun/faces/facelets/impl/DefaultResourceResolver.java
Sending jsf-ri/systest/build.xml
Sending jsf-ri/systest/web/ajax/ajaxEcho.xhtml
Sending jsf-ri/test/com/sun/faces/application/resource/TestResourceHandlerImpl.java
Sending jsf-ri/test/com/sun/faces/application/resource/TestResourceImpl.java
Sending jsf-ri/test/com/sun/faces/application/resource/TestResourceManager.java
Deleting jsf-ri/web/test/resources/nvLibrary/images
Adding (bin) jsf-ri/web/test/root-duke.gif
Adding jsf-ri/web/test/rootLibrary
Adding (bin) jsf-ri/web/test/rootLibrary/rootLibrary-duke.gif
Transmitting file data .............
Committed revision 9752.

@glassfishrobot
Copy link
Author

@edburns said:
Adding jsf-test/#719
Adding jsf-test/#719/build.xml
Adding jsf-test/#719/i_spec_719_old_resource_resolver_war
Adding jsf-test/#719/i_spec_719_old_resource_resolver_war/pom.xml
Adding jsf-test/#719/i_spec_719_old_resource_resolver_war/src
Adding jsf-test/#719/i_spec_719_old_resource_resolver_war/src/main
Adding jsf-test/#719/i_spec_719_old_resource_resolver_war/src/main/java
Adding jsf-test/#719/i_spec_719_old_resource_resolver_war/src/main/java/com
Adding jsf-test/#719/i_spec_719_old_resource_resolver_war/src/main/java/com/sun
Adding jsf-test/#719/i_spec_719_old_resource_resolver_war/src/main/java/com/sun/faces
Adding jsf-test/#719/i_spec_719_old_resource_resolver_war/src/main/java/com/sun/faces/test
Adding jsf-test/#719/i_spec_719_old_resource_resolver_war/src/main/java/com/sun/faces/test/i_spec_719_old_resource_resolver_war
Adding jsf-test/#719/i_spec_719_old_resource_resolver_war/src/main/java/com/sun/faces/test/i_spec_719_old_resource_resolver_war/MyResourceResolver.java
Adding jsf-test/#719/i_spec_719_old_resource_resolver_war/src/main/java/com/sun/faces/test/i_spec_719_old_resource_resolver_war/Resource.java
Adding jsf-test/#719/i_spec_719_old_resource_resolver_war/src/main/resources
Adding jsf-test/#719/i_spec_719_old_resource_resolver_war/src/main/webapp
Adding jsf-test/#719/i_spec_719_old_resource_resolver_war/src/main/webapp/WEB-INF
Adding jsf-test/#719/i_spec_719_old_resource_resolver_war/src/main/webapp/WEB-INF/beans.xml
Adding jsf-test/#719/i_spec_719_old_resource_resolver_war/src/main/webapp/WEB-INF/web.xml
Adding jsf-test/#719/i_spec_719_old_resource_resolver_war/src/main/webapp/i_spec_719_old_resource_resolver.xhtml
Sending jsf-test/build.xml
Transmitting file data ........
Committed revision 9753.

@glassfishrobot
Copy link
Author

File: changebundle.txt
Attached By: @edburns

@glassfishrobot
Copy link
Author

@edburns said:
Sending jsf-api/src/main/java/javax/faces/application/ResourceHandler.java
Sending jsf-api/src/main/java/javax/faces/application/ResourceHandlerWrapper.java
Sending jsf-api/src/main/java/javax/faces/view/ViewDeclarationLanguage.java
Sending jsf-api/src/main/java/javax/faces/view/facelets/FaceletFactory.java
Sending jsf-api/src/main/java/javax/faces/view/facelets/FaceletFactoryWrapper.java
Sending jsf-api/src/main/java/javax/faces/view/facelets/ResourceResolver.java
Sending jsf-ri/src/main/java/com/sun/faces/application/resource/ResourceHandlerImpl.java
Sending jsf-ri/src/main/java/com/sun/faces/application/view/FaceletViewHandlingStrategy.java
Sending jsf-ri/src/main/java/com/sun/faces/facelets/impl/DefaultFaceletFactory.java
Sending jsf-ri/src/main/java/com/sun/faces/facelets/impl/DefaultResourceResolver.java
Transmitting file data ..........
Committed revision 9755.

@glassfishrobot
Copy link
Author

dougd said:
It appears that there is a side effect with the fix on this issue.

The code that appears to be causing the failures is below. What it looks like to me is that if toStream is not an instanceof ClientResourceInfo we just end up going off into the weeds.

public InputStream getInputStream(ResourceInfo toStream, FacesContext ctx)
throws IOException {

// PENDING(edburns): this is a sub-optimal implementation choice
// done in the interest of prototyping. It's never a good idea
// to do a switch statement based on the type of an object.

InputStream in = null;

if (toStream instanceof ClientResourceInfo) {
ClientResourceInfo resource = (ClientResourceInfo) toStream;

in = getInputStreamFromClientInfo(resource, ctx);
if (null == in) {
ClientResourceInfo resourceWithoutLocalePrefix =
new ClientResourceInfo(resource, false);
in = getInputStreamFromClientInfo(resourceWithoutLocalePrefix, ctx);
if (null != in)

{ resource.copy(resourceWithoutLocalePrefix); }

}

} else

{ // PENDING(edburns): get the input stream from the facelet ResourceInfo. <------- "Offending Code" }

return in;

}

@glassfishrobot
Copy link
Author

@edburns said:
http://java.net/jira/browse/JAVASERVERFACES_SPEC_PUBLIC-1085 http://java.net/jira/browse/JAVASERVERFACES_SPEC_PUBLIC-719

SECTION: 1085 changes

M jsf-api/src/main/java/javax/faces/context/ExternalContext.java

  • Specify support for httpOnly.

M jsf-ri/src/main/java/com/sun/faces/context/ExternalContextImpl.java

  • implement new spec requirement.

A test/agnostic/externalContext
A test/agnostic/externalContext/basic
A test/agnostic/externalContext/basic/nbactions.xml
A test/agnostic/externalContext/basic/src
A test/agnostic/externalContext/basic/src/test
A test/agnostic/externalContext/basic/src/test/java
A test/agnostic/externalContext/basic/src/test/java/com
A test/agnostic/externalContext/basic/src/test/java/com/sun
A test/agnostic/externalContext/basic/src/test/java/com/sun/faces
A test/agnostic/externalContext/basic/src/test/java/com/sun/faces/test
A test/agnostic/externalContext/basic/src/test/java/com/sun/faces/test/agnostic
A test/agnostic/externalContext/basic/src/test/java/com/sun/faces/test/agnostic/externalContext
A test/agnostic/externalContext/basic/src/test/java/com/sun/faces/test/agnostic/externalContext/basic
A test/agnostic/externalContext/basic/src/test/java/com/sun/faces/test/agnostic/externalContext/basic/CookieIT.java
A test/agnostic/externalContext/basic/src/main
A test/agnostic/externalContext/basic/src/main/java
A test/agnostic/externalContext/basic/src/main/java/com
A test/agnostic/externalContext/basic/src/main/java/com/sun
A test/agnostic/externalContext/basic/src/main/java/com/sun/faces
A test/agnostic/externalContext/basic/src/main/java/com/sun/faces/test
A test/agnostic/externalContext/basic/src/main/java/com/sun/faces/test/agnostic
A test/agnostic/externalContext/basic/src/main/java/com/sun/faces/test/agnostic/externalContext
A test/agnostic/externalContext/basic/src/main/java/com/sun/faces/test/agnostic/externalContext/basic
A test/agnostic/externalContext/basic/src/main/java/com/sun/faces/test/agnostic/externalContext/basic/Bean.java
A test/agnostic/externalContext/basic/src/main/resources
A test/agnostic/externalContext/basic/src/main/resources/META-INF
A test/agnostic/externalContext/basic/src/main/resources/META-INF/services
A test/agnostic/externalContext/basic/src/main/webapp
A test/agnostic/externalContext/basic/src/main/webapp/index.xhtml
A test/agnostic/externalContext/basic/src/main/webapp/WEB-INF
A test/agnostic/externalContext/basic/src/main/webapp/WEB-INF/beans.xml
A test/agnostic/externalContext/basic/src/main/webapp/WEB-INF/web.xml
A test/agnostic/externalContext/basic/pom.xml
A test/agnostic/externalContext/pom.xml
A test/util/src/main/java/com/sun/faces/test/util/HttpUtils.java

  • I was forced to test this using the new system because Cactus doesn't
    support the new cookie methods introduced in Servlet 3.0.

SECTION: 719 changes

M jsf-ri/src/main/java/com/sun/faces/application/resource/ClasspathResourceHelper.java

  • No test for this one because the TCK test has it. I plan to copy the
    intent of the TCK test, though.

SECTION: Build changes

M jsf-ri/systest/build-tests.xml
A test/agnostic/renderKit
A test/agnostic/renderKit/basic
A test/agnostic/renderKit/basic/nbactions.xml
A test/agnostic/renderKit/basic/src
A test/agnostic/renderKit/basic/src/test
A test/agnostic/renderKit/basic/src/test/java
A test/agnostic/renderKit/basic/src/test/java/com
A test/agnostic/renderKit/basic/src/test/java/com/sun
A test/agnostic/renderKit/basic/src/test/java/com/sun/faces
A test/agnostic/renderKit/basic/src/test/java/com/sun/faces/test
A test/agnostic/renderKit/basic/src/test/java/com/sun/faces/test/agnostic
A test/agnostic/renderKit/basic/src/test/java/com/sun/faces/test/agnostic/renderKit
A test/agnostic/renderKit/basic/src/test/java/com/sun/faces/test/agnostic/renderKit/basic
A test/agnostic/renderKit/basic/src/test/java/com/sun/faces/test/agnostic/renderKit/basic/CustomRenderKitIT.java
A test/agnostic/renderKit/basic/src/main
A test/agnostic/renderKit/basic/src/main/java
A test/agnostic/renderKit/basic/src/main/java/com
A test/agnostic/renderKit/basic/src/main/java/com/sun
A test/agnostic/renderKit/basic/src/main/java/com/sun/faces
A test/agnostic/renderKit/basic/src/main/java/com/sun/faces/test
A test/agnostic/renderKit/basic/src/main/java/com/sun/faces/test/render
A + test/agnostic/renderKit/basic/src/main/java/com/sun/faces/test/render/ButtonRenderer.java
A + test/agnostic/renderKit/basic/src/main/java/com/sun/faces/test/render/CustomRenderKitImpl.java
A + test/agnostic/renderKit/basic/src/main/java/com/sun/faces/test/render/CustomResponseWriter.java
A + test/agnostic/renderKit/basic/src/main/java/com/sun/faces/test/render/FormRenderer.java
A + test/agnostic/renderKit/basic/src/main/java/com/sun/faces/test/render/TextRenderer.java
A test/agnostic/renderKit/basic/src/main/webapp
A + test/agnostic/renderKit/basic/src/main/webapp/renderkit03.jsp
A + test/agnostic/renderKit/basic/src/main/webapp/renderkit03A.jsp
A test/agnostic/renderKit/basic/src/main/webapp/WEB-INF
A test/agnostic/renderKit/basic/src/main/webapp/WEB-INF/faces-config.xml
A test/agnostic/renderKit/basic/src/main/webapp/WEB-INF/beans.xml
A test/agnostic/renderKit/basic/src/main/webapp/WEB-INF/web.xml
A test/agnostic/renderKit/basic/pom.xml
A test/agnostic/renderKit/pom.xml
D jsf-ri/systest/web/renderkit03.jsp
D jsf-ri/systest/web/renderkit03A.jsp

  • remove troublesome test testrenderkit03, move it over to the new system.

This reduces the test count by two on the old side, but increases it
by one on the new side.

M test/agnostic/pom.xml

  • add two new modules:
  • externalContext
  • renderKit

M test/pom.xml

  • Move util to the top. Manfred said it wasn't necessary, but I observed it was.

SECTION: 730 changes

M jsf-api/src/main/java/javax/faces/flow/Flow.java

  • Make this serializable.

Sending jsf-api/src/main/java/javax/faces/context/ExternalContext.java
Sending jsf-api/src/main/java/javax/faces/flow/Flow.java
Sending jsf-ri/build-tests.xml
Sending jsf-ri/src/main/java/com/sun/faces/application/resource/ClasspathResourceHelper.java
Sending jsf-ri/src/main/java/com/sun/faces/context/ExternalContextImpl.java
Sending jsf-ri/systest/build-tests.xml
Deleting jsf-ri/systest/web/renderkit03.jsp
Deleting jsf-ri/systest/web/renderkit03A.jsp
Adding test/agnostic/externalContext
Adding test/agnostic/externalContext/basic
Adding test/agnostic/externalContext/basic/nbactions.xml
Adding test/agnostic/externalContext/basic/pom.xml
Adding test/agnostic/externalContext/basic/src
Adding test/agnostic/externalContext/basic/src/main
Adding test/agnostic/externalContext/basic/src/main/java
Adding test/agnostic/externalContext/basic/src/main/java/com
Adding test/agnostic/externalContext/basic/src/main/java/com/sun
Adding test/agnostic/externalContext/basic/src/main/java/com/sun/faces
Adding test/agnostic/externalContext/basic/src/main/java/com/sun/faces/test
Adding test/agnostic/externalContext/basic/src/main/java/com/sun/faces/test/agnostic
Adding test/agnostic/externalContext/basic/src/main/java/com/sun/faces/test/agnostic/externalContext
Adding test/agnostic/externalContext/basic/src/main/java/com/sun/faces/test/agnostic/externalContext/basic
Adding test/agnostic/externalContext/basic/src/main/java/com/sun/faces/test/agnostic/externalContext/basic/Bean.java
Adding test/agnostic/externalContext/basic/src/main/resources
Adding test/agnostic/externalContext/basic/src/main/resources/META-INF
Adding test/agnostic/externalContext/basic/src/main/resources/META-INF/services
Adding test/agnostic/externalContext/basic/src/main/webapp
Adding test/agnostic/externalContext/basic/src/main/webapp/WEB-INF
Adding test/agnostic/externalContext/basic/src/main/webapp/WEB-INF/beans.xml
Adding test/agnostic/externalContext/basic/src/main/webapp/WEB-INF/web.xml
Adding test/agnostic/externalContext/basic/src/main/webapp/index.xhtml
Adding test/agnostic/externalContext/basic/src/test
Adding test/agnostic/externalContext/basic/src/test/java
Adding test/agnostic/externalContext/basic/src/test/java/com
Adding test/agnostic/externalContext/basic/src/test/java/com/sun
Adding test/agnostic/externalContext/basic/src/test/java/com/sun/faces
Adding test/agnostic/externalContext/basic/src/test/java/com/sun/faces/test
Adding test/agnostic/externalContext/basic/src/test/java/com/sun/faces/test/agnostic
Adding test/agnostic/externalContext/basic/src/test/java/com/sun/faces/test/agnostic/externalContext
Adding test/agnostic/externalContext/basic/src/test/java/com/sun/faces/test/agnostic/externalContext/basic
Adding test/agnostic/externalContext/basic/src/test/java/com/sun/faces/test/agnostic/externalContext/basic/CookieIT.java
Adding test/agnostic/externalContext/pom.xml
Sending test/agnostic/pom.xml
Adding test/agnostic/renderKit
Adding test/agnostic/renderKit/basic
Adding test/agnostic/renderKit/basic/nbactions.xml
Adding test/agnostic/renderKit/basic/pom.xml
Adding test/agnostic/renderKit/basic/src
Adding test/agnostic/renderKit/basic/src/main
Adding test/agnostic/renderKit/basic/src/main/java
Adding test/agnostic/renderKit/basic/src/main/java/com
Adding test/agnostic/renderKit/basic/src/main/java/com/sun
Adding test/agnostic/renderKit/basic/src/main/java/com/sun/faces
Adding test/agnostic/renderKit/basic/src/main/java/com/sun/faces/test
Adding test/agnostic/renderKit/basic/src/main/java/com/sun/faces/test/render
Adding test/agnostic/renderKit/basic/src/main/java/com/sun/faces/test/render/ButtonRenderer.java
Adding test/agnostic/renderKit/basic/src/main/java/com/sun/faces/test/render/CustomRenderKitImpl.java
Adding test/agnostic/renderKit/basic/src/main/java/com/sun/faces/test/render/CustomResponseWriter.java
Adding test/agnostic/renderKit/basic/src/main/java/com/sun/faces/test/render/FormRenderer.java
Adding test/agnostic/renderKit/basic/src/main/java/com/sun/faces/test/render/TextRenderer.java
Adding test/agnostic/renderKit/basic/src/main/webapp
Adding test/agnostic/renderKit/basic/src/main/webapp/WEB-INF
Adding test/agnostic/renderKit/basic/src/main/webapp/WEB-INF/beans.xml
Adding test/agnostic/renderKit/basic/src/main/webapp/WEB-INF/faces-config.xml
Adding test/agnostic/renderKit/basic/src/main/webapp/WEB-INF/web.xml
Adding test/agnostic/renderKit/basic/src/main/webapp/renderkit03.jsp
Adding test/agnostic/renderKit/basic/src/main/webapp/renderkit03A.jsp
Adding test/agnostic/renderKit/basic/src/test
Adding test/agnostic/renderKit/basic/src/test/java
Adding test/agnostic/renderKit/basic/src/test/java/com
Adding test/agnostic/renderKit/basic/src/test/java/com/sun
Adding test/agnostic/renderKit/basic/src/test/java/com/sun/faces
Adding test/agnostic/renderKit/basic/src/test/java/com/sun/faces/test
Adding test/agnostic/renderKit/basic/src/test/java/com/sun/faces/test/agnostic
Adding test/agnostic/renderKit/basic/src/test/java/com/sun/faces/test/agnostic/renderKit
Adding test/agnostic/renderKit/basic/src/test/java/com/sun/faces/test/agnostic/renderKit/basic
Adding test/agnostic/renderKit/basic/src/test/java/com/sun/faces/test/agnostic/renderKit/basic/CustomRenderKitIT.java
Adding test/agnostic/renderKit/pom.xml
Sending test/pom.xml
Adding test/util/src/main/java/com/sun/faces/test/util/HttpUtils.java
Transmitting file data .............................
Committed revision 9794.

@glassfishrobot
Copy link
Author

rogerk said:
This fix caused a regression. See: http://java.net/jira/browse/JAVASERVERFACES-2401

@glassfishrobot
Copy link
Author

rogerk said:
Specifically, it was trunk commit revision 9752 that caused the regression.

@glassfishrobot
Copy link
Author

@edburns said:
Re-closing this because I have created #1141 to cover the specific case mentioned in JAVASERVERFACES-2401.

@glassfishrobot
Copy link
Author

Marked as fixed on Thursday, November 1st 2012, 2:40:41 pm

@glassfishrobot
Copy link
Author

This issue was imported from java.net JIRA JAVASERVERFACES_SPEC_PUBLIC-719

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

2 participants