To access the event parameters of an event within your actionListener, you have to access the source object of your actionEvent object:
package ch.hasselba.xpages;
import java.util.List;
import javax.faces.event.AbortProcessingException;
import javax.faces.event.ActionEvent;
import com.ibm.xsp.complex.Parameter;
import com.ibm.xsp.component.xp.XspEventHandler;
public class MyActionListener implements javax.faces.event.ActionListener {
public void processAction(ActionEvent event)
throws AbortProcessingException {
XspEventHandler eventHandler = (XspEventHandler) event.getSource();
List<Parameter> params = eventHandler.getParameters();
for (Parameter p : params) {
System.out.println(p.getName() + " -> " + p.getValue());
}
}
}
Here is an example XPage:
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:button
value="Label"
id="buttonAction">
<xp:eventHandler
event="onclick"
submit="true"
immediate="true" refreshMode="norefresh">
<xp:this.parameters>
<xp:parameter
name="param"
value="#{javascript:java.lang.System.currentTimeMillis()}">
</xp:parameter>
</xp:this.parameters>
<xp:this.actionListeners>
<xp:actionListener type="ch.hasselba.xpages.MyActionListener" />
</xp:this.actionListeners>
</xp:eventHandler>
</xp:button>
</xp:view>
You can see the result on the console when the button is clicked:
When doing the same for an action, you have to access the UIComponent from the actionEvent:
package ch.hasselba.xpages;
import java.util.List;
import javax.faces.event.ActionEvent;
import com.ibm.xsp.complex.Parameter;
import com.ibm.xsp.component.xp.XspEventHandler;
public class MyActionListener {
public void execute(ActionEvent event) {
XspEventHandler eventHandler = (XspEventHandler) event.getComponent();
List<Parameter> params = eventHandler.getParameters();
for (Parameter p : params) {
System.out.println(p.getName() + " -> " + p.getValue());
}
}
}
Here is an example XPage, the method execute is contained by the managed bean myAction:
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:button
value="Label"
id="buttonAction">
<xp:eventHandler
event="onclick"
submit="true"
immediate="true"
refreshMode="complete"
actionListener="#{myAction.execute}">
<xp:this.parameters>
<xp:parameter
name="param"
value="#{javascript:java.lang.System.currentTimeMillis()}">
</xp:parameter>
</xp:this.parameters>
</xp:eventHandler>
</xp:button>
</xp:view>
Wait, what? You can do that? This I gotta try.