tags:

views:

92

answers:

1

I am trying to determine the best/easiest way to prepopulate certain checkboxes created using Struts2 form tags. My application is a "normal" three tier setup, using Struts2 on the controller layer.

Before I really, really dig deep here, does the tag support creating the list of all possible checkboxes, then populating it (say, via the below action)?

Sample action:

public class UserManagementAction extends ActionSupport implements Preparable {

    private List<String> allRoles;
    private List<String> rolesToPrepopulate;

    // get/set methods

    public void prepare() throws Exception {
       // populate the allRoles and rolesToPrepopulate lists
    }

    public String execute() throws Exception {
        return INPUT;
    }

(Note: assume that struts.xml has been configured with which JSP to return for INPUT)

Thanks for any help.

Jason

A: 

What I would do is a new object class and use it as for checkboxes.

For example:

public class StrutsCheckbox {
    private Integer id;
    private Boolean selected;
...
}

And in prepare() method you can set selected field as you wish (and also id to all of them).

Next in JSP:

<s:iterator value="allRoles">
    <s:checkbox name="selected" id="selected" fieldValue="%{id}" value="%{selected}"/>
</s:iterator>

And then in submit action Collection selected will be filled with ids.

public class UserManagementAction extends ActionSupport implements Preparable {

    private List<StrutsCheckbox> allRoles;
    private List<StrutsCheckbox> rolesToPrepopulate;
    private List<Integer> selectedCheckboxes;

    // get/set methods

    public void prepare() throws Exception {
       // populate the allRoles and rolesToPrepopulate lists
       // fill and set allRoles and/or rolesToPrepopulate
    }

    public String execute() throws Exception {
        return INPUT;
    }

    public String submit() throws Exception {
        // list selectedCheckboxes is filled with selected fields id's 
        return INPUT;
    }

Maybe with some corrections it will work, but the main idea is here.

Trick