You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@myfaces.apache.org by Jeroen Weijers <Je...@Koopmanint.com> on 2008/07/24 17:03:11 UTC

Extend train at runtime

Hi,

I have a train which uses navigation rules to navigate through pages
from page1.jspx to page7.jspx, these all work fine (the rules and
beans that are used to create this train are registered in
faces-config.xml). At page 5 I want to present some information from a
collection, for each of these items I want page 5 to be displayed once
with the contents of the element. Unfortunately I am currently not
able to do so, maybe there is a way to create navigation rules once I
know how many pages I will have to present (I have this information
available right before the first page of the train is loaded, so I can
alter the navigation model).

I tried to alter the model containing the page and the action leading
to them at runtime, so that page 5 is loaded for example two times,
but it never goes to page 5 for the second time (and I can also not go
to page 6 or 7), basicly I am stuck at page 5 (I can go back).

Does anyone know how I can do this. The collection is available in a
session bean, and currently I try to modify the model from this
session bean with the following code:

                                FacesContext facesContext =
FacesContext.getCurrentInstance();
		ExpressionFactory exp = facesContext.getApplication().getExpressionFactory();
		ValueExpression valueExpression =
exp.createValueExpression(facesContext.getELContext(), "#{TrainBCS}",
ProcessMenuModel.class);
		ProcessMenuModel menu = (ProcessMenuModel)
valueExpression.getValue(facesContext.getELContext());
		ChildPropertyTreeModel train = (ChildPropertyTreeModel) menu.getWrappedData();
		ArrayList<NavigationItem> items =
(ArrayList<NavigationItem>)train.getWrappedData();
		NavigationItem nav;
		int ces;
		ces = something.getItem().getCollection().size();
		
		for(int teller = 1; teller < ces; teller++)
		{	
			nav = new NavigationItem();
			nav.setLabel("Page 5." + (teller +1));
			nav.setViewId("page5.jspx");
			nav.setOutcome("nav.page5");	
                                                items.add(4 + teller, nav);
			
		}

TrainBCS is the model of type
org.apache.myfaces.trinidad.model.ProcessMenuModel.

If it has to be a real subtrain that is fine for me, but if it can be
integrated in the real train (as I tried here) I prefer this.

Thanks,

Jeroen Weijers

Re: Extend train at runtime

Posted by Andrew Robinson <an...@gmail.com>.
You can write your own custom navigation handler

On Fri, Jul 25, 2008 at 3:11 AM, Jeroen Weijers
<Je...@koopmanint.com> wrote:
> Hi,
>
> I figured that train is not my problem the fact that i want to use
> navigation rules that do not excist already is a bigger problem. I
> found ways to acces the navigation rules from the runtime
> configuration, but these cannot be modified (i also do not really want
> them to change here because this will influence navigation for all
> users). Is there a way to modify the navigation rules such that
> changes only apply to one session?
>
> Thanks,
>
> Jeroen Weijers
>
> On Thu, Jul 24, 2008 at 5:03 PM, Jeroen Weijers
> <Je...@koopmanint.com> wrote:
>> Hi,
>>
>> I have a train which uses navigation rules to navigate through pages
>> from page1.jspx to page7.jspx, these all work fine (the rules and
>> beans that are used to create this train are registered in
>> faces-config.xml). At page 5 I want to present some information from a
>> collection, for each of these items I want page 5 to be displayed once
>> with the contents of the element. Unfortunately I am currently not
>> able to do so, maybe there is a way to create navigation rules once I
>> know how many pages I will have to present (I have this information
>> available right before the first page of the train is loaded, so I can
>> alter the navigation model).
>>
>> I tried to alter the model containing the page and the action leading
>> to them at runtime, so that page 5 is loaded for example two times,
>> but it never goes to page 5 for the second time (and I can also not go
>> to page 6 or 7), basicly I am stuck at page 5 (I can go back).
>>
>> Does anyone know how I can do this. The collection is available in a
>> session bean, and currently I try to modify the model from this
>> session bean with the following code:
>>
>>                                FacesContext facesContext =
>> FacesContext.getCurrentInstance();
>>                ExpressionFactory exp = facesContext.getApplication().getExpressionFactory();
>>                ValueExpression valueExpression =
>> exp.createValueExpression(facesContext.getELContext(), "#{TrainBCS}",
>> ProcessMenuModel.class);
>>                ProcessMenuModel menu = (ProcessMenuModel)
>> valueExpression.getValue(facesContext.getELContext());
>>                ChildPropertyTreeModel train = (ChildPropertyTreeModel) menu.getWrappedData();
>>                ArrayList<NavigationItem> items =
>> (ArrayList<NavigationItem>)train.getWrappedData();
>>                NavigationItem nav;
>>                int ces;
>>                ces = something.getItem().getCollection().size();
>>
>>                for(int teller = 1; teller < ces; teller++)
>>                {
>>                        nav = new NavigationItem();
>>                        nav.setLabel("Page 5." + (teller +1));
>>                        nav.setViewId("page5.jspx");
>>                        nav.setOutcome("nav.page5");
>>                                                items.add(4 + teller, nav);
>>
>>                }
>>
>> TrainBCS is the model of type
>> org.apache.myfaces.trinidad.model.ProcessMenuModel.
>>
>> If it has to be a real subtrain that is fine for me, but if it can be
>> integrated in the real train (as I tried here) I prefer this.
>>
>> Thanks,
>>
>> Jeroen Weijers
>>
>

Re: Extend train at runtime

Posted by Jeroen Weijers <Je...@Koopmanint.com>.
Hi,

I figured that train is not my problem the fact that i want to use
navigation rules that do not excist already is a bigger problem. I
found ways to acces the navigation rules from the runtime
configuration, but these cannot be modified (i also do not really want
them to change here because this will influence navigation for all
users). Is there a way to modify the navigation rules such that
changes only apply to one session?

Thanks,

Jeroen Weijers

On Thu, Jul 24, 2008 at 5:03 PM, Jeroen Weijers
<Je...@koopmanint.com> wrote:
> Hi,
>
> I have a train which uses navigation rules to navigate through pages
> from page1.jspx to page7.jspx, these all work fine (the rules and
> beans that are used to create this train are registered in
> faces-config.xml). At page 5 I want to present some information from a
> collection, for each of these items I want page 5 to be displayed once
> with the contents of the element. Unfortunately I am currently not
> able to do so, maybe there is a way to create navigation rules once I
> know how many pages I will have to present (I have this information
> available right before the first page of the train is loaded, so I can
> alter the navigation model).
>
> I tried to alter the model containing the page and the action leading
> to them at runtime, so that page 5 is loaded for example two times,
> but it never goes to page 5 for the second time (and I can also not go
> to page 6 or 7), basicly I am stuck at page 5 (I can go back).
>
> Does anyone know how I can do this. The collection is available in a
> session bean, and currently I try to modify the model from this
> session bean with the following code:
>
>                                FacesContext facesContext =
> FacesContext.getCurrentInstance();
>                ExpressionFactory exp = facesContext.getApplication().getExpressionFactory();
>                ValueExpression valueExpression =
> exp.createValueExpression(facesContext.getELContext(), "#{TrainBCS}",
> ProcessMenuModel.class);
>                ProcessMenuModel menu = (ProcessMenuModel)
> valueExpression.getValue(facesContext.getELContext());
>                ChildPropertyTreeModel train = (ChildPropertyTreeModel) menu.getWrappedData();
>                ArrayList<NavigationItem> items =
> (ArrayList<NavigationItem>)train.getWrappedData();
>                NavigationItem nav;
>                int ces;
>                ces = something.getItem().getCollection().size();
>
>                for(int teller = 1; teller < ces; teller++)
>                {
>                        nav = new NavigationItem();
>                        nav.setLabel("Page 5." + (teller +1));
>                        nav.setViewId("page5.jspx");
>                        nav.setOutcome("nav.page5");
>                                                items.add(4 + teller, nav);
>
>                }
>
> TrainBCS is the model of type
> org.apache.myfaces.trinidad.model.ProcessMenuModel.
>
> If it has to be a real subtrain that is fine for me, but if it can be
> integrated in the real train (as I tried here) I prefer this.
>
> Thanks,
>
> Jeroen Weijers
>