liguofeng29’s blog

個人勉強用ブログだっす。

Struts2 - タグ - データタグ

データタグはデータアクセス関連機能を提供する。Action内の属性、国際化など。

データタグ種類

  • s:action : Action実行、結果viewを読み込む
  • s:bean : インスタンス生成
  • s:param : パラメータ提供
  • s:date : 日付出力、指定日付との差出力
  • s:push : Value Stackに値を入れる
  • s:set : application,session,requst,page,action(request)の指定範囲で値を設定
  • s:url : URL生成
  • s:include : JSP読み込み
  • s:i18n : 国際化リソース指定
  • s:text : 国際化出力
  • s:debug : OGNLのStack Context, Value Stackのデバック情報表示
  • s:property : 属性出力

action

<package name="lee" extends="struts-default">
    <action name="tag1" class="action.TagAction">
        <result name="done">/WEB-INF/content/succ.jsp</result>
    </action>
    <action name="tag2" class="action.TagAction"
        method="login">
        <result name="done">/WEB-INF/content/loginSucc.jsp</result>
    </action>
    <action name="*">
        <result>/WEB-INF/content/{1}.jsp</result>
    </action>
</package>
・・・略
public String execute() throws Exception {
    return "done";
}

public String login() throws Exception {
    ActionContext.getContext().put("author", getAuthor());
    return "done";
}
<%@ page contentType="text/html; charset=UTF-8" language="java" errorPage="" %>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html>
<html>
<head>
    <title>s:actionタグ</title>
</head>
<body>
tag1のAction実行結果を読み込む<br/>
<s:action name="tag1" executeResult="true"/>
<hr/>
tag2のAction実行結果を読み込む<br/>
リクエストパラメータは送らない<br/>
<s:action name="tag2" executeResult="true" ignoreContextParams="true"/>
</body>
</html>

bean/param

package dto;

public class Person {
    private String name;
    private int age;
    public void setName(String name) {
        this.name = name;
    }
    public String getName() {
        return this.name;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public int getAge() {
        return this.age;
    }
}
<%@ page contentType="text/html; charset=UTF-8" language="java" errorPage="" %>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html>
<html>
<head>
    <title>s:beanタグ</title>
</head>
<body>
<s:bean name="dto.Person">
    <!-- Personにパラメータ提供 -->
    <s:param name="name" value="'Alex'"/>
    <s:param name="age" value="20"/>

    Person.name<s:property value="name"/><br/>
    Person.age:<s:property value="age"/>
</s:bean>
</body>
</html>

f:id:liguofeng29:20160322160251p:plain

date

<%@ page contentType="text/html; charset=UTF-8" language="java" errorPage="" %>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html>
<html>
<head>
    <title>s:dateタグ</title>
</head>
<body>
<!-- Stack Conext内にnow生成 -->
<s:bean var="now" name="java.util.Date"/>
<s:date name="#now" format="yyyy/MM/dd" nice="false"/><hr/>
<s:date name="#now" format="yyyy/MM/dd" nice="true"/><hr/>
<s:date name="#now" nice="true" /><hr/>
<s:date name="#now" nice="false"/><hr/>
</body>
</html>

f:id:liguofeng29:20160322160955p:plain

push

<%@ page contentType="text/html; charset=UTF-8" language="java"
    errorPage=""%>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html>
<html>
<head>
    <title>s:pushタグ</title>
</head>
<body>
<h2>s:pushはあるインスタンスをValueStackに入れる(StackContextのtop)</h2>
<s:bean name="dto.Person" var="p">
    <s:param name="name" value="'Alex'"/>
    <s:param name="age" value="20"/>
</s:bean>
<!-- Stack Contextのp対象をValueStackに入れる-->
<s:push value="#p">
    <!-- 出力 #がいらなくなる -->
    ValueStack.name:<s:property value="name"/><br/>
    ValueStack.age:<s:property value="age"/><br/>
</s:push>
</body>
</html>

f:id:liguofeng29:20160322161436p:plain

set

<%@ page contentType="text/html; charset=UTF-8" language="java"
    errorPage=""%>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html>
<html>
<head>
    <title>s:setタグ</title>
</head>
<body>
<!-- インスタンス生成 -->
<s:bean name="dto.Person" id="p">
    <s:param name="name" value="'Alex'"/>
    <s:param name="age" value="20"/>
</s:bean>

Stack Contextのpをデフォルト(action)に格納<br/>
<s:set value="#p" name="value1"/>
Stack Context.name:<s:property value="#value1.name"/><br/>
Stack Context.age:<s:property value="#value1.age"/><br/>
request.name:${requestScope.value1.name}<br/>
request.age:${requestScope.value1.age}<hr/>

Stack Contextのpをapplicationに格納<br/>
<s:set value="#p" name="value2" scope="application"/>
application範囲.name:${applicationScope.value2.name}<br/>
application範囲.age:${applicationScope.value2.age}<hr/>

Stack Contextのpをsessionに格納<br/>
<s:set value="#p" name="value3" scope="session"/>
session範囲.name:${sessionScope.value3.name}<br/>
session範囲.age:${sessionScope.value3.age}
</body>
</html>

f:id:liguofeng29:20160322162025p:plain

url

<%@ page contentType="text/html; charset=UTF-8" language="java"
    errorPage=""%>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html>
<html>
<head>
    <title>s:urlタグ</title>
</head>
<body>
<h2>s:urlはURLを生成する</h2>
value属性指定<br/>
<s:url value="sampleValue.action"/>
<hr/>
action属性指定,paramあり<br/>
<s:url action="sampleAction">
    <s:param name="sampleParam" value="'param1'" />
</s:url>
<hr/>
action,value指定なし<br/>
<s:url includeParams="get"  >
    <s:param name="id" value="%{'99'}"/>
</s:url>
<hr/>
action,value同時指定<br/>
<s:url action="sampleAction" value="sampleValue">
    <s:param name="sampleParam" value="'param1'" />
</s:url>
</body>
</html>

f:id:liguofeng29:20160322162823p:plain

ほか

<s:include value="included-file.jsp"/>
<s:property value="name"/>
<s:i18n name="リソース">
  <s:text name="key"></s:text>
</s:i18n>
<s:debug />