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