早見表
Struts2 | SAStruts | Spring | |
---|---|---|---|
画面遷移 | struts.xmlで指定 | URLに合ったActionクラスが実行 | @RequestMapping等で指定 |
画面の値を受けとる方法 | クラス変数に自動的に格納 | クラス変数に自動的に格納(@ActionForm) | @ModelAttributeや引数など |
画面に値を渡す方法 | クラス変数に格納 | クラス変数に格納 | model.addAttributeで格納 |
画面遷移
Spring
アノテーション(@RequestMapping/@PostMapping/@GetMapping)で遷移先を指定する
【jsp→java】
・formactionで遷移先URLを指定
<form:form method="post"> <input type="submit" value="確認へ進む" formaction="offer_confirm"/> </form:form>
【java→jsp】
・@Controllerのついたクラスを用意する
・@Post/GetMappingでURLに紐づくメソッドを用意する
・returnで開くjspを指定する
@Controller public class ConfirmOffer { // コンテキストルート+offer_confirmのURLの場合、これが実行される @PostMapping("offer_confirm") public String confirm(Model model) { // confirmOffer.jspを開く return "confirmOffer"; } }
Struts2
struts.xmlで実行するメソッドや表示するjspを指定する
【jsp→java】
・actionでstruts.xmlに紐づく名前を指定する
<s:form action="hello"> <s:submit value="HelloWorldページへ行く" /> </s:form>
struts.xml
・jspで指定した名前に紐づく定義のクラス、メソッドが実行される
(HelloWorldActionクラスのexecuteメソッドが実行)
<struts> <package name="default" extends="struts-default"> <action name="hello" class="sample.HelloWorldAction" method="execute"> <result name="success">/jsp/HelloWorld.jsp</result> </action> </package> </struts>
【java→jsp】
・struts.xmlで指定したメソッドが実行される
・returnの値がstruts.xmlに紐づき、表示するjspを指定する
public class HelloWorldAction { public String execute() { // struts.xmlに紐づく値を返す return "success"; } }
struts.xml
・result nameがメソッドの戻り値と紐づく、表示するjspを指定する
<struts> <package name="default" extends="struts-default"> <action name="hello" class="sample.HelloWorldAction" method="execute"> <result name="success">/jsp/HelloWorld.jsp</result> </action> </package> </struts>
値の受け渡し
Spring
【jsp→java】
・modelAttributeを使用することでjava側でまとめて受け取れる
<form:form modelAttribute="offerForm" method="post"> <label>ユーザーID:</label> <form:input path="userId"/><br> <label>名前:</label> <form:input path="name"/><br> <input type="submit" value="確認へ進む" formaction="offer_confirm"/> <input type="hidden" name="hiddenItem" value="hiddenValue"> </form:form>
【java→jsp】
・ @ModelAttributeを使うとFormで取得可能
・model.addAttributeでjspに渡せる
@Controller public class ConfirmOffer { @PostMapping("offer_confirm") public String confirm(Model model, @ModelAttribute("offerForm") OfferForm form, // formの値を取得 @RequestParam(name="userId") String id, // これでも取得可能 String hiddenItem // これでも取得可能 ) { // jspに値を渡す model.addAttribute("offerForm", form); return "confirmOffer"; } }
Struts2
クラス変数を用意しておくと自動で画面の値がセットされる
【jsp→java】
・jspの項目のnameとクラス変数の名前は合わせておくこと
<s:form action="hello"> <s:textfield name="name" /> <s:submit value="HelloWorldページへ行く" /> </s:form>
・クラス変数とそのgetter/setterを用意しておくことで自動で値が入る
・jspに渡す処理は不要
public class HelloWorldAction { public String execute() { System.out.println(name); return "success"; } // jspの変数名と同じ名前でクラス変数を用意 private String name; // getterを用意しておくこと public String getName() { return name; } // setterを用意しておくこと public void setName(String name) { this.name = name; } }
<body> <s:property value="name" />さん </body>