Search

<s:debug> 태그로 표시된 value stack에 접근하기
<s:property value="#parameters.artist_id"/><br>
<s:property value="#parameters.artist_name"/><br>
<s:property value="#parameters.nationality"/><br>
<s:property value="#parameters.activity_type"/><br>
<s:property value="#parameters.genre"/><br>
<s:property value="#parameters.activity_period"/><br>
<s:property value="#parameters.imgFileName"/><br>
<s:property value="#com.opensymphony.xwork2.ActionContext.parameters.imgFileName"/>

<s:debug> 내용을 보면 Value Stack Contents 와 Stack Context로 나누어져있는데, Stack Context에는 #key 로 접근할 수 있다고 쓰여 있다.

parameters {activity_type=[Ljava.lang.String;@1f55cae, artist_id=[Ljava.lang.String;@197d09f, artist_name=[Ljava.lang.String;@18e1b, nationality=[Ljava.lang.String;@1f808e6, genre=[Ljava.lang.String;@18b492, activity_period=[Ljava.lang.String;@f1b25e}

파라메터 인터셉터 <interceptor-ref name="params"> 를 설정하면, request의 파라메터 값이 밸류 스택에 저장된다고 한다.
위처럼 들어가는 듯..

근데 input type="file"은 못가져오나?
jsp
<form name="frm "action="${pageContext.request.contextPath}/openapi/artist/add.omp" method="post" enctype="multipart/form-data">
    <input type="text" name="test"><br>
    <input type="file" name="img"><br>
    <input type="submit">
</form>

action
public class ArtistAction extends BaseAction {

    /**
     *
     */
    private static final long serialVersionUID = 384851516132095345L;
    private final static Logger log = Logger.getLogger(ArtistAction.class);

    private File img;            // 업로드할 실제 파일
    private String imgFileName;    // 업로드할 파일명, 규칙 : (파일input태그 name) + FileName

    public String add() {
        HttpServletRequest request = getRequest();

        log.debug(request.getParameter("test"));
        log.debug("FileName = " + imgFileName);
        log.debug("FileSize = " + img.length());

        return SUCCESS;
    }

    public File getImg() {
        return img;
    }

    public void setImg(File img) {
        this.img = img;
    }

    public String getImgFileName() {
        return imgFileName;
    }

    public void setImgFileName(String imgFileName) {
        this.imgFileName = imgFileName;
    }
}

interceptor에 <interceptor-ref name="fileUpload"/> 설정되어 있고, <input type="file" name='img"> 태그의 name만 aciton의 멤버변수명과 일치시켜 주면 간단하게 파일을 받을 수 있다.

꼭 <s:file> 태그를 쓰지 않아도 상관없다.

[strust2] Chain Result

프로그래밍/Framework 2010. 12. 14. 16:50 Posted by galad
다른 package의 Action으로 chain 걸기

    <package name="openapi" extends="bp-common" namespace="/openapi">
        <action name="*/*" class="com.omp.bp.cms.openapi.action.OpenApiAction">
            <result type="chain">
                <param name="namespace">${namespace}</param>
                <param name="actionName">${actionName}</param>
                <param name="method">${actionName}</param>
            </result>
        </action>
    </package>

    <package name="artist" extends="bp-common" namespace="/artist">
        <action name="add" class="com.omp.bp.cms.openapi.artist.action.ArtistAction" method="add">
            <result>/serverIp.jsp</result>
        </action>
    </package>

적절하게 namespace, actionName, method를 넘겨주면 된다.
request 시의 parameter를 모두 다음 Action에서 사용하고 싶을 때 사용.