ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

Struts2でのエラーメッセージあれこれ

2015-09-18 15:15:01 | JavaとWeb
今日もStruts2ネタを1つ。

Struts2でエラーメッセージを「表示」しようとすると、
 アクションエラー(全体で1つ)
 フィールドエラー(各フィールドごと)
の2種類が考えられる

そして、エラーのチェック方法としては、
  1.アクションクラス名-validation.xmlを作成して、チェック
  2.@Validationsでアノテーションを使ってチェック
  3.validate()メソッドを使ってチェック
と3通り考えられます(もっとあるかもしれないけど・・・)

ここでは、2と3の方法を取り上げます。




■サンプル
【御題】
名前になにもいれないと、フィールドエラーとして、名前のところにエラーが出て
開始数に何もいれないと、アクションエラーとして、一番上にエラーが出る

開始数がマイナスだと

フィールドエラーとして、開始数のところにエラーがでる。

【ソースコード:変更のあるもののみ】

基本的にソースは

Struts2でINPUTタグの値を読む方法(ServletRequestAwareの利用法)
http://blog.goo.ne.jp/xmldtp/e/469a8c3f14f5b8fc8584018b58ff8268
と同じなので、相違点のみ、掲載します。

●index.jsp
アクションエラー、フィールドエラーの指定をします。
フィールドエラーは、s:fielderrorタグだけだと、すべてのフィールドエラーが表示される為、
その中で、s:paramを使って限定しています。
<%@ page contentType="text/html; charset=utf-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<HEAD>
<TITLE>HelloTest</TITLE>
</HEAD>
<BODY>
	<s:actionerror />
    <s:form action="hello.action"  theme="simple">
         名前 :<s:textfield name="name"/><s:fielderror><s:param value="%{'name'}" /></s:fielderror><br/>

         開始数:<input type="text" name="start"/><s:fielderror><s:param value="%{'start'}" /></s:fielderror><br/>
         <br/>
         <s:submit type="button"  value="実行" />
    </s:form>
</BODY>
</html>


●struts.xml
エラーのとき、入力画面に戻るために、inputの設定をします

<?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="input">/index.jsp</result>
<result name="success">/hello.jsp</result>
</action>
</package>
</struts>



●gui.HelloAction.java
  2.@Validationsでアノテーションを使ってチェック
  3.validate()メソッドを使ってチェック
の両方を追加しています。


package gui;

// セッションで使う
import java.util.Map;

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

import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.SessionAware;

// 一般的に・・・
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.validator.annotations.RequiredStringValidator;
import com.opensymphony.xwork2.validator.annotations.Validations;


//==============================================//
// //
// 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;
}

@Validations(requiredStrings = @RequiredStringValidator(fieldName = "name", message = "名前を入力してください"))

@Override
public void validate()
{
try
{
int kai = Integer.parseInt(getServletRequest().getParameter("start"));
if (kai < 0)
{
addFieldError("start","開始数が負の数");
}
}
catch(Exception e)
{
// 数字でなかったら、なにもしない
addActionError("開始数が数字でない");
}
}

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

// セッションでの取得
int kai;
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;
}
}



【注意】
・エラーメッセージを表示する為に画面を書き換える。そのときsタグで指定したものは、値が入ってくるが
INPUTタグで書いたもの(開始数)は、値が入ってこない(3枚目の写真参照)。自分で設定すること



■参考サイト
1.http://d.hatena.ne.jp/cazzie/20080131/1201795354
2.http://kinjouj.github.io/2013/09/struts2-6-form-validation-1.html
3.http://cmslabs.blogspot.jp/2011/02/struts-2_21.html

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

バリューグラフは「なぜ5回」の可視化ってこと?

2015-09-18 10:52:29 | Weblog
システム×デザイン思考で世界を変える 慶應SDM「イノベーションのつくり方」の中に「バリューグラフ」って言うのが出てくる。
これは、こんなかんじ

http://lab.sdm.keio.ac.jp/idc/kids/kids_20130512.pdfの81シート目より引用

で、価値づくり設計という本の中にでてくるらしい。あるものに対して(上記例では石井ドライヤー)上位に「なぜ」「なぜ」とWhyを深く掘り下げていく(なので、→は下から上になっている)慶応SDMの本では、ここまでしかでていない(下の部分のどうやってを詳しくは書いていない)が、この上の部分って、要するにトヨタの「なぜ5回」の可視化だよね!

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

テレ東除くキー局の中継ヘリ集結で自衛隊救助の邪魔に-鬼怒川

2015-09-18 00:10:28 | ネットワーク
ここの記事

鬼怒川 テレ東除くキー局の中継ヘリ集結で自衛隊救助の邪魔に
http://www.news-postseven.com/archives/20150917_351429.html

やはりテレビ東京はちがう、神対応ということなのでしょうか・・・
・・・予算が無かっただけかもしれません

でも、自衛隊の邪魔をしてはいけません。

こういうのって、妨害したテレビ局は罪にならないんでしょうか・・・?

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする