[Strust2] <s:radio> 사용법

프로그래밍/Framework 2009. 7. 29. 14:19 Posted by galad
radio에 디폴트로 선택되게 하고 싶을 때

<s:radio name="productInfo.updateTypeCd" list="#{'A':'오름차순', 'D':'내림차순(최근 등록한 콘텐츠가 위로 정렬)'}" value="%{'D'}"></s:radio>

위와 같이 리스트를 강제로 설정하고, 기본값도 문자열로 주고 싶으면 %{'D'} 를 지킬 것. %{}를 사용하지 않으면 Struts2에서 태그를 변환하지 않는 듯.



<s:radio name="productInfo.updateTypeCd" list="#{'A':'오름차순', 'D':'내림차순(최근 등록한 콘텐츠가 위로 정렬)'}" value="D"></s:radio>

이게 될 것 같지만 되지 않는다..
<s:checkbox name="codeId" fieldValue="%{serviceType}" theme="simple"></s:checkbox>

위의 태그는 실제로 다음의 HTML을 만듬.

<input type="checkbox" name="codeId" value="s1" id="getServiceType_codeId"/>
<input type="hidden" id="__checkbox_getServiceType_codeId" name="__checkbox_codeId" value="s1" />

아래의 히든 input은 스트러츠에서 쓰는 듯하고,
체크 박스에 값 설정하려면 스트러츠 태그에서 value속성이 아닌 fieldValue를 써야한다. 주의!

참조: http://struts.apache.org/2.1.6/docs/checkbox.html

추가.
value속성은 boolean값 입력해서 checked/unchecked 설정하는데 쓰임
JSP:
<s:checkbox label="checkbox test" name="checkboxField1" value="aBoolean" fieldValue="true"/>

Velocity:
#tag( Checkbox "label=checkbox test" "name=checkboxField1" "value=aBoolean" )

Resulting HTML (simple template, aBoolean == true):
<input type="checkbox" name="checkboxField1" value="true" checked="checked" />

추가2.

체크박스가 같은 이름으로 여럿이고 그 중에서 체크된 것의 값만을 받으려 할 때,
일일이 체크된 것을 스크립트로 계산할 필요없다.
Action에 멤버변수로 체크박스의 체크된 값만을 받을 수 있다.

<s:checkbox name="codeId" fieldValue="%{serviceType}" theme="simple"></s:checkbox>
이 경우엔 Action에서
private String codeId;로 해서 getter/setter만 있으면 체크된 것들의 fieldValue만 가져온다.
"XXXX, XXXX, XXXX" 와 같이 콤마로 구분한다. 다만 사이사이 공백도 있으므로 trim할 것.

추가3.
checkbox 인터셉터를 설정하면 체크안해도 값을 넘겨받을 수 있다.
<!-- 회원관리 -->
        <action name="manage*" class="com.omp.bp.cms.manage.action.ManageAction" method="manage{1}">
            <interceptor-ref name="checkbox">
              <param name="uncheckedValue">N</param> // uncheck시 값
          </interceptor-ref>
            <interceptor-ref name="bpCommonStack"></interceptor-ref>
            <result>/cms/manage/manage{1}.jsp</result>
            <result name="JoinApproved" type="redirect">/manage/manageJoin.omp</result>
            <result name="Updated" type="redirect">/manage/manageMember.omp</result>
        </action>


'프로그래밍 > Framework' 카테고리의 다른 글

[Strust2] <s:radio> 사용법  (1) 2009.07.29
[Struts2] Model-driven interceptor  (0) 2009.05.27
[iBatis] queryForMap() 사용법  (0) 2009.04.21
[iBatis] iterate 사용법  (1) 2009.04.13
[Struts2] <s:iterator> <s:if> 사용법  (0) 2009.04.13
참고: http://www.struts2.org/struts2-control-tags-using-iterator-tag/

<table>
    <s:iterator value="serviceTypeList" id="serviceTypeInfo" status="cust_stat">
    <tr bgcolor="<s:if test="#cust_stat.odd==true">grey</s:if><s:else>white</s:else>">
        <td>serviceType</td>
        <td><s:property value="serviceType"/></td>
    </tr>
    </s:iterator>
</table>

value -> list
id -> 루프 돌 때의 현재 object
status -> 상태값.(짝수/홀수 등등)

위의 결과는 다음.

serviceType s1
serviceType s2
serviceType s3


추가.


id false
false String Deprecated. Use 'var' instead
란다.

<s:iterator value="serviceTypeList" status="stat" var="serviceTypeInfo">
<s:if test="{#temp.isSelected.equals('Y')}" >
위는 위에서 말한 id 대신 var 사용한 것이고, var 사용하면 Stack Context에 들어가서 #key로 참조 가능하다. <s:debug/>로 확인가능.

그리고 iterator 안에서 if 태그 사용하기 예제. 찾기 힘들었다...

ps. if 태그에서 test="{}" 괄호 빼먹지 말 것!!!

추가2.

if tag 사용법이 좀 헷갈리네.
<s:if test="%{true}"> -> 항상 참
<s:if test='%{#serviceTypeInfo.isSelected == "Y"}' > -> 문자열 비교 시 사용. 'Y' 랑은 다르니 조심할 것
<s:if test='%{isSelected == "Y"}' > -> 위랑 같다. iterator 안에서는 #serviceTypeInfo 처럼 강제로 밸류스택을 안 찾아도 되는건가?

추가3.
<s:if test='%{status.equalsIgnoreCase("R")}'>준비중</s:if>
위의 것도 잘 된다. equals도 잘 될 듯. 비교 대상이 문자열("")인가 문자('')인가를 헷갈리지 말 것

'프로그래밍 > Framework' 카테고리의 다른 글

[iBatis] queryForMap() 사용법  (0) 2009.04.21
[iBatis] iterate 사용법  (1) 2009.04.13
[iBatis] 동적쿼리에서 ORDER BY 하기  (0) 2009.04.13
[iBatis] 동적쿼리문 생성  (0) 2009.04.13
[Struts2] <s:select> 사용법  (0) 2009.04.10

[Struts2] <s:select> 사용법

프로그래밍/Framework 2009. 4. 10. 11:37 Posted by galad
<s:select name="subsetListKey" list="subsetList" headerKey="1" listKey="codId" listValue="codeName"/>

headerKey는 필수. 기본 선택 번호 headerKey는 첫번째 필드에 줄 값. headerValue랑 쌍으로 쓰인다. default로 선택해주는 것은 value속성
listKey는 값
listValue는 보여지는 것.

추가.

<s:select name="serviceSystem" list="systemInfoList" headerValue="Select Value" headerKey="-1" listKey="systemId" listValue="systemName" value="%{#serviceTypeInfo.systemId}">

headerValue는 첫줄에 보여줄 값. 예를 들어 "선택해주세요" 같은 것
headerKey는 headerValue에 설정할 값. 선택했을 때 주어지는 값.
value가 selected를 설정하는 값. value에 입력되는 값과 listKey의 값이 같으면 기본선택으로 된다. listValue와는 관계없는 듯.

추가2.

<s:select name="contentTypeInfo.status" list="#{'R':'준비중', 'U':'사용중'}" cssClass="form"></s:select>
<select name="contentTypeInfo.status" class="form">
        <option value="R">준비중</option>
        <option value="U">사용중</option>
</select>
위의 2개는 같다. list 속성에 직접 "키:값"의 쌍으로 목록을 넣을 수 있다.
출처: http://www.zulutown.com/blog/2009/01/21/accessing-current-item-properties-in-a-struts2-iterator/

<s:iterator value="myList" status="status" id="item" > 
<s:property value="%{attr.item.name}"/> Doesn't work
<s:property value="%{#attr.item.name}"/> Works
<s:property value="attr.item.name"/> Doesn't work
<s:property value="#attr.item.name"/> Works
<s:property value="item.name"/> Doesn't work
<s:property value="name"/> Works
<s:property value="#attr.item.name"/> Works
</s:iterator>