Thursday, March 20, 2008

Oracle ADF Two action listeners in one action


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);
}
}

Friday, March 7, 2008

Firefox 2.0.0.0.x on CentOS 5.1


Thanks to people like Diezel who posted the original article on nixadmins.net, we now know that in order for Firefox 2.0 to run on a CentOS (or Red Hat EL) version 5.1 machine, we need to install compat-libstdc++-33.



Using yum this is done as easy as entering



#yum install compat-libstdc++-33


s the root user. The rest is trivial.