Quantcast
Channel: ウィリアムのいたずらの、まちあるき、たべあるき
Viewing all articles
Browse latest Browse all 7350

Struts2でINPUTタグの値を読む方法(ServletRequestAwareの利用法)

$
0
0
JavaEEの話をしたあとで、Struts2っていうのも、なんなんですが、
Struts2のお話。

【課題】
Struts2で、sタグでなく、HTMLのINPUTタグで書いた値を読みたい
というときは、どうするか・・・

【何が問題?】
このとき、Struts2のActionを書くBeanに(s:で書くタグのように)
INPUTタグのnameと同じ名前の変数を書いても、そこには入ってこない
HTTPrequestの中に入っているので、そこからとってこないといけない
で、HTTPrequestをどうやってとってくるの?これが問題

【答え(の概要)】

・ServletRequestAwareをimplementsする
  →implementsするということは、必要なメソッドを定義しないといけない。
   この必要なメソッドがsetServletRequest()とgetServletRequest()
  →さらに、requestをクラスの属性として変数宣言しないといけない
  →必要なインポートもある

・getServletRequest().getParameter("INPUTのname名");で取り出せる


サンプルを以下に示します。



【サンプルのお題】

・はじめ、名前をいれて、開始数に何も入力しないと

 Hello World 名前 1回目 と表示される


・まったくおなじようにクリックすると

 前回訪問回数(今回は1回)に1足された回数が表示される


・開始数を設定すると

 開始数に1足された回数が表示される


【ソースコード】

・入力画面(初期表示画面)index.jsp
 s:textfieldタグで名前、inputタグで開始数を設定している
<%@ page contentType="text/html; charset=utf-8" %> <%@ taglib prefix="s" uri="/struts-tags" %> <html> <HEAD> <TITLE>HelloTest</TITLE> </HEAD> <BODY> <s:form action="hello.action" theme="simple"> 名前 :<s:textfield name="name"/><br/> 開始数:<input type="text" name="start"/><br/> <br/> <s:submit type="button" value="実行" /> </s:form> </BODY> <html>

・結果表示画面 hello.jsp
セッションの中に入っているmsgを表示している

<%@ page contentType="text/html; charset=utf-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<HTML>
<HEAD>
<TITLE>足し算</TITLE>
</HEAD>
<BODY>
<s:property value="#session.msg"/>
<A HREF="index.jsp">戻る</A>
</BODY>
</HTML>


・設定ファイル web.xml
 は、ふつうのstruts2と変わらないので省略

・設定ファイル struts.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
<package name="helloStruts2" namespace="/" extends="struts-default">
<action name="hello" class="gui.HelloAction">
<result name="success">/hello.jsp</result>
</action>
</package>
</struts>


・ソースコード gui.HelloAction.java
 セッションとリクエストの処理をしている。今回の御題リクエスト関係は、以下のとおり
(1)リクエストで使うものインポート
(2)リクエストの宣言
(3)リクエストで必要なアクセサ記述(setServletRequest()とgetServletRequest())
(4)リクエストパラメタでの取得
 具体的な内容は以下のソースとコメントを参照してください

package gui;

//セッションで使う
import java.util.Map;
import org.apache.struts2.interceptor.SessionAware;

//(1)リクエストで使うものインポート
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.interceptor.ServletRequestAware;

//一般的に・・・
import com.opensymphony.xwork2.ActionSupport;

//==============================================//
////
//Struts2//
//セッション、リクエストのサンプル//
////
//==============================================//
public class HelloAction extends ActionSupport implements SessionAware,ServletRequestAware{
private String name;//sタグの変数
private Map session;//セッションの宣言
private HttpServletRequest request;//(2)リクエストの宣言

//sタグで必要なアクセサ
public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

//セッションで必要なアクセサ
public void setSession(Map session) {
this.session = session;
}

//(3)リクエストで必要なアクセサ記述
public void setServletRequest(HttpServletRequest request) {
this.request = request;
}

public HttpServletRequest getServletRequest() {
return this.request;
}

public String execute()
{
//======================================//
//値の取得//
//======================================//
// sタグのnameは、何もしなくても取得されている

//セッションでの取得
intkai;
String kaistr = (String)session.get("kaisu");
if ( kaistr==null)
{
kai=0;
}
else
{
kai = Integer.parseInt(kaistr);
}

//(4)リクエストパラメタでの取得
String start = getServletRequest().getParameter("start");
if (start!=null)
{
try
{
kai = Integer.parseInt(start);
}
catch(Exception e)
{
//数字でなかったら、なにもしない
}
}


//======================================//
//処理//
//======================================//
kai++;//今回の分を足す
String msg = "Hello World" + name + ":"+ kai+"回目";


//======================================//
//出力//
//======================================//
//セッション書き出し
session.put("kaisu", String.valueOf(kai));
session.put("msg", msg);

this.addActionMessage("成功1");
return SUCCESS;
}
}






Viewing all articles
Browse latest Browse all 7350

Latest Images

Trending Articles