What I did is basically added some code in the getters and setters methods that are bound
to the boolean checkbox. I'm pretty sure there's a better way of doing this, and
if anyone knows, please tell me. But I believe this is probably what jazir had in mind
and here's what I implemented a while back:
@Name("testJobList")
| @Stateful
| public class TestBean implements TestLocal {
| @DataModel("JobList")
| private List<JobStatus> statusList = null;
|
| @DataModelSelection("JobList")
| private JobStatus jobSelected;
|
| private Map<String, Boolean> selectedMap = null;
|
| private boolean selected;
|
| @Factory("JobList")
| public final void retrieveJobs() {
| selectedMap = new HashMap<String, Boolean>();
|
| List<JobStatus> jobStatus = ... ; // get jobStatus object
| }
|
| public final String performAction() {
| for (JobStatus tempJob : statusList) {
| // Assuming a JobStatus job has fields (with getters) attr1
| String attr1 = tempJob.getAttr1();
| if (selectedMap.get(attr1)) {
| // perform action code here...
| }
| }
| return "goToPage";
| }
|
| public final boolean isSelected() {
| if (jobSelected != null && selectedMap != null) {
| String key = jobSelected.getAttr1();
| Boolean value = selectedMap.get(key);
| if (value == null) {
| return false;
| } else {
| return value;
| }
| } else {
| return false;
| }
| }
|
| public final void setSelected(final boolean inputSelected) {
| if (selectedMap != null && jobSelected != null) {
| String key = jobSelected.getAttr1();
| selectedMap.put(key, inputSelected);
| }
| }
|
| @Remove
| @Destroy
| public void destroy() {
|
| }
| }
Here's the JSP markup:
<h:form>
| <h:dataTable value="#{JobList}" var="selectJob">
| <h:column>
| <h:selectBooleanCheckbox value="#{testJobList.selected}" />
| </h:column>
| <h:column>
| <f:facet name="header">
| <h:outputText value="attr1" />
| </f:facet>
| <h:outputText escape="true" value="#{selectJob.attr1}"
/>
| </h:column>
| <h:column>
| <f:facet name="header">
| <h:outputText value="attr2" />
| </f:facet>
| <h:outputText value="#{selectJob.attr2}" />
| </h:column>
| <h:commandButton value="performAction"
| action="#{testJobList.performAction}" type="submit" />
| </h:form>
This code for the getters and setters is probably a little muddled because I'm using
the Tomahawk extended datatable to sort things (I took out the Tomahawk extended datatable
JSF markup from the JSP). In this case, my unique identifier for the object would be
attr1. I believe the setters and getters could probably be simpler (and one should
probably use a List instead of a Map), something like this:
List selectedList;
|
| public final boolean isSelected() {
| return selectedList.contains(jobSelected); // or return
selectedList.contains(jobSelected.getAttr1());
| }
|
| public final void setSelected(final boolean inputSelected) {
| if (inputSelected) {
| selectedList.add(jobSelected); // or selectedList.add(jobSelected.getAttr1());
| }
| }
But the whole point here is that one needs to add some more code (more than the usual
stuff) in the getters/setters in the value binding for the boolean checkbox - and make a
note that JSF iterates through all the rows of the datatable - and that one can use this
to your advantage in the getters/setters. This works for me and I didn't have to
modify the entity... I was probably not clear in my explanation (I gotta go to sleep :)
), but I hope this helps.
View the original post :
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3979556#...
Reply to the post :
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&a...