2014/12/24 - [프로그램 자료/ASP.NET] - 코드비하인드에서 페이지 이동시 포스트로 데이터 보내기 asp.net code behind redirect with post data




현재 개발환경에서는 세션을 사용하지 않고 있다. 

헌데 현재 컨트롤러에서 다른 컨트롤러로 post로 이동한 효과를 주어야 할 필요가 생겼다.


찾아보니 RedirectAttributes 같은 클래스가 있던데 내부적으로 session 객체를 사용한단다.

실제로 테스트 코르를 작성하니 JSESSION 쿠키가 생성되더라.


그래서 만들게 되었다.


위 이전 포스트는 asp.net 용.



import java.io.IOException;
import java.text.MessageFormat;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import lombok.Builder;
import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
@Builder
public class RemotePost {

    private HttpServletRequest request;

    private HttpServletResponse response;

    private String url;

    private String method;

    private String formName;

    private Map<StringStringparam;

    private static String htmlForm;
    private static String inputForm;

    static {
        inputForm = "<input name=\"{0}\" type=\"hidden\" value=\"{1}\">";

        StringBuffer tags = new StringBuffer();
        tags.append("<html><head></head>");
        tags.append("<body onload=\"document.{0}.submit()\">");
        tags.append("<form name=\"{0}\" method=\"{1}\" action=\"{2}\" >");
        tags.append("{3}");
        tags.append("</form>");
        tags.append("</body></html>");
        htmlForm = tags.toString();
    }

    public void Flush() throws IOException {

        StringBuffer input = new StringBuffer();
        for (Map.Entry<StringStringdata : param.entrySet()) {
            input.append(MessageFormat.format(inputForm, data.getKey(), data.getValue()));
        }
        
        String html = MessageFormat.format(htmlForm, formName, method, url, input.toString());

        response.reset();
        response.getWriter().write(html);
        response.flushBuffer();
    }

}


// 사용방법 (return을 사용하지 않으면 해당 메소드 밑에 있는 소스도 동작함)
RemotePost post = RemotePost.builder().request(request).response(response)
                .url("/auth/otp").method("POST").formName("otpForm").param(param).build();
post.Flush();
return;











Posted by motolies
,