2010-03-01 3 views
7

weblogic에서 실행중인 j2ee 응용 프로그램이 있습니다. 내 멀티 박스와 혼동 스러웠다.Struts Multibox에서 모두 선택을 취소 할 수 없습니다

멀티 박스에 대해 알고있는 것은 제출할 때 검사 된 항목이 문자열 배열로 전달된다는 것입니다.

나는 왜 체크 박스를 체크하지 않았을 때 하나의 박스가 체크 된 채로 남아있을 때 나는 잘 작동한다는 것을 알지는 못한다. 그러나 모든 것을 체크하지 않으면, 제출 된 배열은 이전에 체크 된 멀티 박스의 배열이다. 그것은 비어 있어야했다.

제발 도와 주실 수 있습니까?

답변

14

ActionForm 클래스의 reset() 메소드에 익숙합니까?

이 방법의 수명 목적은 확인란을 재설정하는 것입니다. 양식에 체크 체크 박스가 있고 제출 한 경우 해당 체크 박스가 요청에 표시됩니다. 확인란을 선택하지 않으면 요청에 대해 아무 것도 전송되지 않습니다 (GET 제출은이 동작을 관찰하는 간단한 방법입니다).

Struts는 요청 바인딩을 수행 할 때 요청의 매개 변수 이름을 양식의 매개 변수와 일치시킵니다. 즉, 일치하는 것이 있으면.

지금이 단계 고려 : 나는 ActionForm의에 부울 필드가

  • 을;
  • 또한 양식에 일치하는 체크 박스가 있습니다.
  • 양식 제출 => Struts가 요청을 바인딩하므로 이제 ActionForm에서 내 속성이 true가됩니다.
  • 폼의 체크 박스를 선택 해제하고 다시 제출 => 체크 박스에 대한 요청에 아무 것도 보내지 않음 => Struts는 바인딩 할 필요가 없음 => 필드는 ActionForm에 그대로 유지됩니다.

위의 내용은 다중 체크 박스에 적용되지만 하나의 값 대신 배열을 얻습니다.

reset() 메소드를 입력하십시오. 이것은 요청을 바인딩하기 전에 Struts에 의해 호출됩니다. 여기서 필드 값을 false로 설정할 수 있습니다. 요청에 도달하면 Struts는 true => OK로 바꿉니다. 요청에 도달하지 않은 경우 (확인되지 ​​않았기 때문에) 값은 false => OK로 다시 유지됩니다.

멀티 박스의 경우도 마찬가지입니다. 배열 길이를 0으로 줄임으로써 (null이 아닌) ActionForm에서 값 목록을 재설정해야합니다.

ActionForm에 요청 ​​범위가있는 경우 각 요청에서 개체가 다시 만들어 지므로 대개 중요하지 않습니다. 하지만 체크 박스가있는 세션 범위의 ActionForm의 경우 reset()이 필수입니다.

관련 문제