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