iterator 탭 내부에 Struts2의 checkbox 탭을 사용합니다

12993 단어 Javastruts2
출력된 체크 상자의 checked 속성과value 속성, 그리고Action 측의 수용 방법.

코드


Todo.java
@Entity
public class Todo {

    @Id
    private long id;
    private boolean checked;
    private String content;
    private Date created;

    // getter/setter略
}
TodoAction.java
public class TodoAction extends ActionSupport {

    private List<Todo> todoList;
    private Collection<String> checkList;

    public List<Todo> getTodoList() { return todoList; }
    public void setTodoList(List<Todo> todoList) { this.todoList = todoList; }

    public Collection<String> getCheckList() { return checkList; }
    public void setCheckList(Collection<String> checkList) { this.checkList = checkList; }

    @Action("display")
    public String display() {

        User user = (User) session.get("user");
        userName = user.getName();

        TodoEjb ejb = new TodoEjb();
        todoList = ejb.findByUser(user);

        return SUCCESS;
    }

    @Action("update")
    public String update() {

        for (String check : checkList) {
            long id = Long.parseLong(check);
            for (Todo todo : todoList) {
                if (todo.getId() == id) {
                    todo.setChecked(true);
                    break;
                }
            }
        }

        TodoEjb ejb = new TodoEjb();
        ejb.update(todoList);

        return "update";
    }
}
todo.jsp
<s:iterator value="todoList">
  <tr class="row">
    <td class="col-sm-1 text-center">
        <s:checkbox name="checkList" value="checked" fieldValue="%{id}" />
    </td>
    <td class="col-sm-9">
        <s:property value="content" />
    </td>
    <td class="col-sm-2 text-center">
        <s:date name="created" format="yyyy/MM/dd HH:mm" />
    </td>
  </tr>
</s:iterator>                                                                                           

실행 결과


DB의 값이 이런 느낌이라고 가정하면
id
user_id
checked
content
created
0
testuser1
1
저것을 하다
2015-04-23 15:58:20
1
testuser1
0
저것
2015-04-23 13:49:14
result.html
<tr class="row">
  <td class="col-sm-1 text-center">
      <input type="checkbox" name="checkList" value="0" checked="checked" id="update_checkList"/>
      <input type="hidden" id="__checkbox_update_checkList" name="__checkbox_checkList" value="0" />
  </td>
  <td class="col-sm-9">あれをやる</td>
  <td class="col-sm-2 text-center">2015/04/23 15:58</td>
</tr>
<tr class="row">
  <td class="col-sm-1 text-center">
      <input type="checkbox" name="checkList" value="1" id="update_checkList"/>
      <input type="hidden" id="__checkbox_update_checkList" name="__checkbox_checkList" value="1" />
  </td>
  <td class="col-sm-9">あれとあれをやる</td>
  <td class="col-sm-2 text-center">2015/04/23 13:49</td>
</tr>

<s:checkbox> 탭 속성


value


출력된 체크 상자의 checked 속성에 반영됩니다.
boolean을 통해 자동 형식 변환을 한 결과true일 때checked="checked"로 변경됩니다.

fieldValue


출력된 콤보 상자의value 속성에 반영됩니다.

name


선택한 복선상자의value 속성 ( 탭의 속성으로fieldValue 속성) 의 Bean을 지정합니다.
여러 개를 선택할 수 있기 때문에 동작 측면에서Collection<String>에서 수신합니다.
String은 쉼표 + 반각 공백 구분자로 들어갈 수도 있습니다.
하지만 아무것도 검사하지 않았다면null.

총결산


대충 이런 느낌.
<s:checkbox value="true" fieldValue="1" name="checkList" />
<s:checkbox value="false" fieldValue="2" name="checkList" />
<s:checkbox value="true" fieldValue="3" name="checkList" />
 ↓ (Response)
<input type="checkbox" name="checkList" value="1" checked="checked" />
<input type="checkbox" name="checkList" value="2" />
<input type="checkbox" name="checkList" value="3" checked="checked" />
 ↓ (Submit)
checkList = ["1", "3"]

좋은 웹페이지 즐겨찾기