행복한 아빠

Struts 태그에서 자동생성되는 TD 태그 없애기 본문

웹기술들

Struts 태그에서 자동생성되는 TD 태그 없애기

행복한아빠 2010. 3. 22. 09:54
사용자 삽입 이미지
Strtus2로 개발을 하는데 팀원들이 form을 사용할 때 <s:form>을 제외하고는 그 외의 struts 태그는 사용하지 않는 것을 발견했습니다. struts의 form 관련 태그를 사용하면 입력값 처리와 validation 처리 등 여러가지로 편리한 점이 많은데 왜 사용하지 않는지 이유를 물어보았습니다.


동기

보통 UI는 UI 디자이너가 HTML 작업한 후 UI 개발자가 JSP로 변경하여 필요한 UI 로직 처리를 위한 태그를 삽입합니다. 그런데 아래와 같이 struts2 태그를 작업했더니...
    <tr>
     <td><span id="re">+</span> 회원명</td>
     <td><s:textfield name="name" size="20" maxlength="10"/></td>
    </tr>

테이블이 깨지는 현상이 목격되었습니다. 브라우저 소스 보기를 통해 렌더링된 결과를 살펴보았습니다.
    <tr>
     <td><span id="re">+</span> 회원명</td>
     <td><tr>
    <td class="tdLabel"></td>
    <td
><input type="text" name="name" size="20" maxlength="10" value="" id="save_name"/></td>
</tr>

</td>
    </tr>

스트러츠2의 form 관련 태그들은 친절하게 알아서 자동으로 <table>관련 태그들을 렌더링해 줍니다(이 때 tag의 label속성을 사용하면 태그의 제목(레이블)까지 꾸며서 출력합니다). 그러나 이건 우리가 원하는 결과가 아니었습니다.
이런 자동 태그 렌더링은 다음과 같이 간단히 해결할 수 있습니다.


해결방법

struts2 태그들은 태그를 렌더링할 때 특정 테마를 이용하여 html 태그를 생성합니다. 다음과 같이 simple 테마를 사용하면 별다른 추가 태그 없이 해당 input 태그(select나 다른 것도 동일)만 출력합니다.
    <tr>
     <td><span id="re">+</span> 회원명</td>
     <td><s:textfield name="name" size="20" maxlength="10" theme="simple"/></td>
    </tr>
원하는 데로 아래와 같이 렌더링됩니다.
    <tr>
     <td><span id="re">+</span> 회원명</td>
     <td><input type="text" name="name" size="20" maxlength="10" value="" id="save_name"/></td>
    </tr>


정리

자동화 된 강력한 기능이 가끔 불필요할 때가 있네요.
물론 Strtus2 테마는 개발자가 고유의 것을 만들 수도 있으며 이 테마는 위와 같이 tag 렌더링 방법뿐만 아니라 스트러츠의 validation에서 렌더링하는 client side validation java script도 조정할 수 있습니다.
이를 잘만 활용한다면 일관성 있는 UI를 쉽게 만들 수도 있겠습니다. 이걸 잘 만들려면 UI 디자이너와 많이 논의할 필요가 있겠군요.

뭐 저도 theme을 만들어 본 적은 없고 문서만 읽었을 뿐 아는 지식이 별로 없어 더 이상 할 말은 없습니다. :)

4 Comments
댓글쓰기 폼