That helps, yes, for navigation components I can definitely see that.  My issue 
would be that if we had:

Tiles.xml:

    <definition name="myLayout" path="/visualComps/myLayout.jsp">
       <put name="header" value="/visualComps/header.jsp" />
       <put name="search" value="/visualComps/search.jsp" />
       <put name="body" value="" />
       <put name="footer" value="/visualComps/footer.jsp" />
    </definition>
    
    <definition name="/foo.tiles" extends="myLayout">
                <put name="body" value="foo.jsp" /> 
    </definition>

I had envisioned that all my controls that were in the actual foo.jsp (and each 
subsequent page) would have to use a global navigation rule.  Glad to hear that 
I can still have:

        <navigation-rule>
                <from-view-id>/foo.jsp</from-view-id>
                <navigation-case>
                        <from-outcome>success</from-outcome>
                        <to-view-id>/foo-success.jsp</to-view-id>
                </navigation-case>
        </navigation-rule>

I was envisioning having to do:

        <navigation-rule>
                <from-view-id>*</from-view-id>
                <navigation-case>
                        <from-outcome>foo-success</from-outcome>
                        <to-view-id>/foo-success.jsp</to-view-id>
                </navigation-case>
        </navigation-rule>

This will likely come out in a future mail to the list (I just joined 
yesterday), but I'm getting IO errors (Connection Refused) when the Tiles 
plugin tries to load /WEB-INF/tiles.xml.  I'm going back and trying running the 
sample MyFaces-tiles-example app to see if it has the same issue.
                

-----Original Message-----
From: Matthias Wessendorf [mailto:[EMAIL PROTECTED] 
Sent: Wednesday, March 16, 2005 11:18 AM
To: MyFaces Discussion
Subject: Re: commandButton does not work with Tiles

Neal,

for instance you have navigation.jsp, that uses <h:commandLink 
action="showBarPage" ...../> for navigation to other pages inside your app, so 
you need faces-config.xml to realize that.

Now let's look at subviews (Tiles is the same, since a tile is embedded inside 
a subview).

You have pages like:
-foo.jsp
-bar.jsp
-myPage.jsp

all off the include navigation.jsp as subview (eg. 
<f:subview="navi"><jsp:include page="navigation.jsp"/></f:subview>
or with Tiles)

so each of that pages, *show* the navigation

if the foo.jsp is displayed(foo.jsf in browser), the view-id is "foo.jsp"

ok, if your faces-config navigation rule looks like:

        <navigation-rule>
                <from-view-id>/navigation.jsp</from-view-id>
                <navigation-case>
                        <from-outcome>showBarPage</from-outcome>
                        <to-view-id>/bar.jsp</to-view-id>
                </navigation-case>
        </navigation-rule>


that does not work,

but if you have <from-view-id>/foo.jsp</from-view-id>
that will work.


ok, now let's look what happens when bar.jsf (view-id "bar.jsp") is shown in 
the browser.

your navigation rules looks now:

        <navigation-rule>
                <from-view-id>/foo.jsp</from-view-id>
                <navigation-case>
                        <from-outcome>showBarPage</from-outcome>
                        <to-view-id>/bar.jsp</to-view-id>
                </navigation-case>
        </navigation-rule>


yes, that doesn't work.

so add an other

        <navigation-rule>
                <from-view-id>/bar.jsp</from-view-id>
                <navigation-case>
                        <from-outcome>showBarPage</from-outcome>
                        <to-view-id>/bar.jsp</to-view-id>
                </navigation-case>
        </navigation-rule>

that works.

Now you have two rules
        <navigation-rule>
                <from-view-id>/bar.jsp</from-view-id>
                <navigation-case>
                        <from-outcome>showBarPage</from-outcome>
                        <to-view-id>/bar.jsp</to-view-id>
                </navigation-case>
        </navigation-rule>
        <navigation-rule>
                <from-view-id>/foo.jsp</from-view-id>
                <navigation-case>
                        <from-outcome>showBarPage</from-outcome>
                        <to-view-id>/bar.jsp</to-view-id>
                </navigation-case>
        </navigation-rule>


A navigation rule like the first we talked about won't work!
Only if you are interessted in viewing navigation.jsp (but navigation.jsp 
couldn't be presented since it has no <f:view>, because it is designed to be a 
*subview*

However, so instead of having two or more rules for the one navigation rule 
(<h:commandLink action="showBarPage" ...../>) from navigation.jsp why not using 
*global* one ?

        <navigation-rule>
                <from-view-id>*</from-view-id>
                <navigation-case>
                        <from-outcome>showBarPage</from-outcome>
                        <to-view-id>/bar.jsp</to-view-id>
                </navigation-case>
        </navigation-rule>


I hope it was clear to you :)
-Matthias



Neal Haggard wrote:
> Matthias,
> 
>       I have a question about 'you must use "global" navigation rulez for 
> command components'.  Why was this decided?  Why can't the sub-view find the 
> view-id for the parent?  I'm new to JSF, so please forgive any ignorance here.
> 
>       My group is trying to evaluate how to move to JSF and we thought we 
> were going with MyFaces due to it's built-in tiles support.  However, we're 
> talking about a large application.  I have a feeling trying to use 
> global-navigation rules will not scale well as we get into the hundreds of 
> pages.
> 
> Neal   
> 
> -----Original Message-----
> From: Vinod Singh [mailto:[EMAIL PROTECTED]
> Sent: Wednesday, March 16, 2005 12:10 AM
> To: MyFaces Discussion
> Subject: Re: commandButton does not work with Tiles
> 
> 
> Hi Matthias,
> 
> Here I am saying that when I click on the submit button 
> (<h:commandButton id="submit" action="#{Persister.saveClient}" value
> 
>>="#{Message.client_submit_button}" />) then method
>>Persister.saveClient()
> 
> is not called. If I use this page without tiles then this method is called.
> 
> Thanks,
> 
> Vinod
> 
> 
> 
> Vinod,
> 
> when you use Subviews (<f:subview/>)
> 
> then you must use "global" navigation rulez for
> 
> command components (commadnButton or commandLink)
> 
> if you use something like:
> 
> <h:commandButton id="submit" action="myoutcome" value 
> ="#{Message.client_submit_button}" />
> 
> you must have something like that in faces.-config.xml
> 
> 
> 
>            <navigation-rule>
>                      <from-view-id>*</from-view-id>
>                      <navigation-case>
>                                <from-outcome>myoutcome</from-outcome>
> 
> <to-view-id>/myPageWithTiles.jsp</to-view-id>
>                      </navigation-case>
>            </navigation-rule>
> 
> 
> HTH,
> Matthias
> 
> 
> Vinod Singh wrote:
> 
>>Hi All,
>>
>>I have created a simple jsf page, when I acces this page without tiles
> 
> then
> 
>>everything works fine but with tiles control does not transfer to the 
>>desired class specified in the action attribute of commandButton.
>>
>>Can anybody tell where I am wrong?
>>
>>Thanks,
>>
>>Vinod
>>
>>
>><%@ taglib uri="http://java.sun.com/jsf/html"; prefix="h" %> <%@ taglib 
>>uri="http://java.sun.com/jsf/core"; prefix="f" %> <f:loadBundle 
>>basename="Message" var="Message"/>
>>
>><f:view>
>><html>
>><head><title>Client</title></head>
>>  <body>
>>    <h:form id="clientForm">
>>      <h:message for="clientForm" /><br />
>>      <h:panelGrid columns="3">
>>        <h:outputText value="#{Message.client_name_label}" />
>>        <h:inputText id="client_id" value="#{Client.client_id}" 
>>required
> 
> ="
> 
>>true">
>>          <f:validateLength maximum="30" minimum="3" />
>>        </h:inputText>
>>        <h:message for="client_id" />
>>
>>        <h:outputText value="#{Message.client_desc_label}" />
>>        <h:inputText id="description" value="#{Client.description}"
>>required="true">
>>          <f:validateLength maximum="50" minimum="1" />
>>        </h:inputText>
>>        <h:message for="description" />
>>        <h:commandButton id="submit" action="#{Persister.saveClient}"
> 
> value
> 
>>="#{Message.client_submit_button}" />
>>      </h:panelGrid>
>>    </h:form>
>>  </body>
>></html>
>></f:view>

Reply via email to