OminiFaces’s ‘o:methodParam’ does now work for me as below. How can I use another way? I don’t know what I am missing in it. It can work with <h:commandButton> and <a4j:jsFunction> without using Seam , When Seam is used it does not work with <a4j:jsFunction>.
Development Eviroment is
RichFaces 4.
Seam 2.3
OminiFaces 1.2 JBoss 7.1.1
@Name("DataTableBacking")
public class DataTableBacking {
Department[] items = {new Department("AAA", "AAA"), new Department("BBB", "BBB"), new Department("CCC", "CCC")};
public Department[] getItems() {
return items;
}
public void action(Department action) {
System.out.println("Action called with:" + action.getName());
}
}
datatable.xhtml
<h:html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:rich="http://richfaces.org/rich"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:richm="http://developmentTutorials.com/java">
<h:body>
<h:form>
<h1>Data Table</h1>
<rich:dataTable id="departmentTable" value="#{DataTableBacking.items}" var="dep" style="width:100%">
<rich:column style="width:100px;text-align:center;">
#{dep.name}
<richm:confirmLink actionBeanMethod="#{DataTableBacking.action(dep)}" render="departmentTable"/>
</rich:column>
</rich:dataTable>
</h:form>
</h:body>
</h:html>
In tag lib, confirmation.xml
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:rich="http://richfaces.org/rich"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:o="http://omnifaces.org/ui"
xmlns:of="http://omnifaces.org/functions"
xmlns:ui="http://java.sun.com/jsf/facelets">
<o:methodParam name="methodParam" value="#{actionBeanMethod}" />
<a4j:commandLink value="delete" onclick="#{rich:component('confirmation')}.show();return false" />
<h:commandButton value="direct" action="#{methodParam}" />
<a4j:jsFunction name="submit" action="#{methodParam}" render="#{render}" />
<rich:popupPanel id="confirmation" width="250" height="150">
<f:facet name="header">Confirmation</f:facet>
<h:panelGrid>
<h:panelGrid columns="1">
<h:outputText value="Are you sure?" style="FONT-SIZE: large;" />
</h:panelGrid>
<h:panelGroup>
<input type="button" value="OK" onclick="#{rich:component('confirmation')}.hide(); submit(); return false" />
<input type="button" value="Cancel" onclick="#{rich:component('confirmation')}.hide(); return false" />
</h:panelGroup>
</h:panelGrid>
</rich:popupPanel>
</ui:composition>
I’m not entirely sure about the
nullvalue. If data would be absent after the post-back (an often recurring mistake) the method should not be called at all.You do have a bug in your code though, and that’s that
a4j:jsFunctionwill create a function and assign it to a js variable namedsubmit, and this will be the same for every row.So
submit=function(){RichFaces.ajax("j_idt15:departmentTable:0:j_idt18" ...for the first row,submit=function(){RichFaces.ajax("j_idt15:departmentTable:1:j_idt18" ...for the second row, and so on.Your dialog will then always call the one from the last row. So, possible, is there a
nullas the last value in the list that you feed the table?Using the following slightly simplified code, I get the passed parameter in the action method:
datatable.xhtml:
confirmation.xhtml:
I added the direct call via a
h:commandButtonto validate that the expression does make it correctly to the Facelet tag. In this example, when I click thedeletelink and confirm, I get the last element (B) as expected in theaction()method for both rows.I used JBoss AS 7.1.1, OmniFaces 1.2 Snapshot and RichFaces 4.0.0. The OmniFaces version shouldn’t matter too much as I didn’t make any changes to the
methodParambetween those versions (I’m the author of that particular part).Which server and with which versions of OmniFaces and RichFaces are you using?
Edit
Per the comments, changing the
Stringinto aDepartment:DataTableBacking.java:
Department.java:
(all the other code the same as before)
This should and (at my side) indeed does not make any difference. When you changed the
Stringarray into aDepartmentone, did you do it in the same way as I did? Can you show your full backing bean?