Some time ago, I run into a situation when I wanted to add two action listeners inside a single command element but I realized that this was just not possible. When I asked about that in the JDeveloper forums somebody told me that this could only be accomplished in code, but at that time my knowledge was just not enough
A couple of days ago I run into the same problem. I had a view page that when accessed wanted to know two things:
- First was the
${row.rowKeyStr}
of the row to display and ... - Next a session scope boolean parameter called
#{sessionScope.returnHome}
that indicated whether to return the user to the application home page or to another (the search in that case) page.
To summarize, I ended up with the a button called View record
in
two different pages both having a navigation case (also called
view
) linking to the view record page. in the application JSF
diagram.
On both cases the expression #{row.rowKeyStr}
had to be
recorded in the JSF session scope along with a value for the
returnHome
flag that had to be true on one occasion
and false on the other..
Following is the code I used to perform this. First the base class :
package myapp.view.backing; import javax.faces.application.Application; import javax.faces.context.FacesContext; import javax.faces.el.ValueBinding; class backing_SRListBase { public backing_SRListBase() { } public String viewButtonBase_action( boolean returnHome) { // access the faces context FacesContext fc = FacesContext.getCurrentInstance(); Application app = fc.getApplication(); // on both case row.rowKeyStr points to the current row key ValueBinding vbActRowKey = app.createValueBinding("#{row.rowKeyStr}"); String rowKey = (String )vbActRowKey.getValue(fc); // in that case we must save that in sessionScope ValueBinding vbSessionScopeRowKey = app.createValueBinding("#{sessionScope.rowKey}"); vbSessionScopeRowKey.setValue( fc, rowKey); // also save the return home boolean value ValueBinding vbReturnHome = app.createValueBinding("#{sessionScope.returnHome}"); vbReturnHome.setValue( fc, new Boolean( returnHome)); return "view"; } }
Finally, the backing bean for each of the two pages looks like this
package myapp.view.backing; public class backing_OpenSRList extends backing_SRListBase { public backing_OpenSRList() { } public String viewButton_action() { return viewButtonBase_action( false); } }
No comments :
Post a Comment