Mmm... when I use the source attribute of frame tag, it automatically
prefix the link with the current webapp context. Example
source="/faces/page.jspx" -> /webapp/faces/page.jspx.
getActionUrl again does this, but only if using a mapping like /faces/
(by JSF spec 1.1).
So using <afh:frame source="#{utils.actionUrl['/page.jspx']}"
<afh:frame source="#{utils.actionUrl['/page.jspx']} ->
[getActionUrl] ->/webapp/faces/page.jspx ->
[source attr.] -> /webapp/webapp/faces/page.jspx
I think the only way to go is to manually strip out that prefix after
calling getActionUrl, anyway I'm curious about the reasons of this
special behaviour in the specs.
Cosma
2006/6/19, Cosma Colanicchia <[EMAIL PROTECTED]>:
I get the point, thanks Adam. Probably it would be fine to have
<af:frame> do it automatically, at least with an option.
Cosma
2006/6/15, Adam Winer <[EMAIL PROTECTED]>:
> Cosma,
>
> What you'll need to do is change:
> source="/faces/people/edit/top.jspx"
> to
> source="#{...anELExpression..>}"
>
> ... where the EL expression uses ViewHandler.getActionURL().
> If you're using Facelets, I'd register a custom EL function that
> takes a viewID and calls ViewHandler.getActionURL(), so this'd
> look like:
>
> source="#{my:getViewUrl('/people/edit/top.jspx')}"
>
> (If you're not using Facelets, you can create a custom Map
> implementation that has the same effect.)
>
> -- Adam
>
> On 6/15/06, Cosma Colanicchia <[EMAIL PROTECTED]> wrote:
> > Hello,
> >
> > I have a problem using PageFlowScope when the dialog contains a
> > frameset. I explain what I'm doing:
> >
> > I have an <af:table> that launch a dialog in a child window when the
> > user click on a row.
> >
> > <af:commandLink text="Edit" useWindow="true"
> > action="#{peopleActions.editPerson}">
> > <af:setActionListener from="#{person.personId}"
> > to="#{pageFlowScope.personId}"/>
> > </af:commandLink>
> >
> > In the action method, I put an object in the PageFlowScope and return
> > a dialog:* outcome.
> >
> > public String editPerson() {
> > Integer personId = (Integer) getPageFlowAttribute("personId");
> > PersonDTO person =
PeopleFacadeUtil.getFacade().getPersonDetails(personId);
> > setPageFlowAttribute("person", person);
> > return "dialog:editPerson";
> > }
> >
> > My navigation rule point to a frameset page:
> >
> > <navigation-rule>
> > <navigation-case>
> > <from-action>#{peopleActions.editPerson}</from-action>
> > <from-outcome>dialog:editPerson</from-outcome>
> > <to-view-id>/people/edit/frameset.jspx</to-view-id>
> > </navigation-case>
> > </navigation-rule>
> >
> > And my frameset is defined like this:
> >
> > <afh:frameBorderLayout>
> > <f:facet name="top">
> > <afh:frame
> > source="/faces/people/edit/top.jspx" name="editPersonTop"
> > height="350px" />
> > </f:facet>
> > <f:facet name="bottom">
> > <afh:frame
> > source="/faces/people/edit/edit.jspx"
> > name="editPersonContent" height="*" />
> > </f:facet>
> > </afh:frameBorderLayout>
> >
> >
> > The problem is that inside the top.jspx and edit.jspx, the
> > PageFlowScope "person" attribute is lost. If I skip the frameset and
> > navigate directly to one of the two, the object is there.
> >
> > My guess is that the <af:frame> component doesn't pass throught the
> > _afPfm parameter when loading the view defined in "source", so the
> > correct pageFlowScope can't be determined.
> >
> > Can this be considered a bug?
> >
> > Thanks
> > Cosma
> >
>