QA@IT

struts2.3でJSPからActionに遷移しない

22008 PV

お世話になります。
struts2.3で、JSPで指定したactionから同じactionを指定してあるexecuteメソッドがあるJavaコードに
正常に遷移しません。
どなたか解決方法をご教授下さい。

eclipse Juno
tomcat7.0
java sdk 7
MySQL5.5.29
struts2.3
tiles3.03

index.jsp

<%@ page language="java" contentType="text/html; charset=Windows-31J"
    pageEncoding="Windows-31J"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>社員認証要求画面</title>
</head>
<body>
<table>
<tr>
<td align="center" valign="middle">
社員ID、パスワードを入力して社員認証してください。<br>
一定時間操作がない場合も自動的にログアウトされるためこの画面が表示されることがあります。
<br>
<s:form method="post" action="logout">
<s:submit value="社員認証画面にGO!" />
</s:form>
</td>
</tr>
</table>
</body>
</html>

LogoutAction

package com.MySQL.actions;

import java.util.Map;
import java.util.List;


import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.dispatcher.SessionMap;
import org.apache.struts2.interceptor.SessionAware;
import com.opensymphony.xwork2.ActionSupport;

@Results({ 
@Result(name="success", location="/tiles.jsp")
}) 
public class LogoutAction extends ActionSupport implements SessionAware {

    private static final long serialVersionUID = 1L;

    @Action("logout")
    public String execute() throws Exception {

        ((SessionMap<String, Object>)session).invalidate();

        ListAction dao = new ListAction();
        List<Object> table  = dao.getTable();
        ((SessionMap<String, Object>)session).put("list", table);
        return "success";
    }

    private Map<String, Object> session;
    public void setSession(Map<String, Object> session) {
        this.session = session;
    }

}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="StrutsTest" version="3.0">


<display-name>stock</display-name>
<context-param>
<param-name>org.apache.tiles.impl.BasicTilesContainer.DEFINITIONS_CONFIG</param-name>
<param-value>/WEB-INF/tiles.xml</param-value>
</context-param>
<listener>
     <listener-class>com.MySQL.actions.InitListener</listener-class>
</listener>

<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
<init-param>
    <param-name>actionPackages</param-name>
    <param-value>com.MySQL.actions</param-value>
</init-param>
<init-param>
    <param-name>struts.enable.DynamicMethodInvocation</param-name>
    <param-value>false</param-value>
</init-param>

</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
        <filter-name>SessionFilter</filter-name>
        <filter-class>com.MySQL.actions.SessionFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>SessionFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>


<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>

baseLayout.jsp

<%@page contentType="text/html; charset=UTF-8"%>
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>
<tiles:insertAttribute name="title" ignore="true" />
</title>
</head>
<body>
<tiles:insertAttribute name="header" />
<hr>
<font size = "5">ウエルカム画面</font>
<hr>
<table>
<tr>
<td valign="top">
<tiles:insertAttribute name="date" />
</td>
<td valign="top">
<tiles:insertAttribute name="main" />
</td>
<td valign="top">
<tiles:insertAttribute name="search" />
</td>
</tr>
</table>
</body>
</html>

tiles.jsp

<%@page contentType="text/html; charset=UTF-8"%>
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<tiles:insertDefinition name="Welcome"/>

tiles.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE tiles-definitions PUBLIC "-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN" "http://tiles.apache.org/dtds/tiles-config_2_0.dtd">
<tiles-definitions>
<definition name="Welcome" template="/baseLayout.jsp">
    <put-attribute name="title"  value="スポーツ用品店社員用在庫表メニュー認証画面"/>
    <put-attribute name="header" value="/header.jsp"/>
    <put-attribute name="date" value="/date.jsp" />
    <put-attribute name="main" value="/main.jsp" />
    <put-attribute name="search" value="/search.jsp" />
</definition>
</tiles-definitions>
  • Actionアノテーションについて指摘しわすれていたので追記しました。 -
  • ちなみに他に何か動いてるActionは存在しますか? -
  • LogoutActionのすべてのソースを提示してもらえますか?
    先頭のimportやpackageも含めて。
    -
  • あと、現在のコードはどの様に作成されましたか?本やサイトが元ですか?(その場合はstrutsなどのバージョンも同じ?)、それとも全くのオリジナルのコードですか? -
  • tiles.jspはbaselayout.jspと大体同じと思っておいていいですか?今回はactionが呼ばれてない問題なのでこちらのjspは関係ないとは思いますが。 -
  • エラーを勘違いしてました。actionが呼ばれてないではなくてresultの未定義でしたね。 -
  • まだ404が出ている場合、stock/logout.action にアクセスしてみてください。ただの404ならデプロイに失敗している可能性があります。Actionが呼ばれるか、Actionが見つからないというエラーならjspの位置などの問題化と思います。
    どのように配置しているかわかりませんが、eclipseでコンテキストのロードで配置しているなら例外とか発生していませんか?
    -
  • index.jspがその位置にあって404だというのなら、web.xmlがおかしいか、stock/index.jspを試してないか、Context -
  • (続き)Contextのロードに失敗してるからでしょう。
    -

回答

多分長くなりますが、 (struts-tilesではなく)tiles3.0.3 ありでも動作しましたので貼っていきます。
一応tilesが使える状態のものを張っていきますが、web.xmlにtilesのcontext-paramやlistenerがない状態でも私の環境でlogout.actionは動いてました。当然jspのレンダリングでエラーになりますが、index.jspからlogout.actionは呼ばれていました。
なので、今提示されているソースに限っては tilesはひとまず関係ないのだろうなと個人的には思っています。
(asahina-aliceさんがtilesを疑っておられるのはエラーが「No result defined for action ~」だからでしょうか。ただsturuts-tilesじゃなさそうなのでどうでしょうね。)

Dynamic Method invocationでもエラーがそうなるケースがあるようなので、アノテーションの不備だとかを疑ってみたほうがいいように思います。


環境

 Win 8.1 x64
 eclipse pleiades 4.3 ultimate
 Tomcat 7 ( pleiades 付属のxamppについてるTomcat )
 struts 2.3.16
 tiles 3.0.3    - https://tiles.apache.org/download.html
 slf4j 1.7.5    - http://www.slf4j.org/download.html

その他

  • SessionFilterとDBアクセス部分は削除。
  • tiles.xmlで定義されているjspは適当。

配置

プロジェクトは

  • 動的Webプロジェクト (モジュールバージョン 3.0)
  • ターゲットランタイム Apache Tomcat v7.0

eclipse プロジェクト・エクスプローラーで

Java リソース/
  src/
    com.MySQL.actions/
      LogoutAction.java

WebContent/
  WEB-INF/
    lib/
      (後述)
    tiles.xml
    web.xml
  baseLayout.jsp
  date.jsp
  header.jsp
  index.jsp
  main.jsp
  search.jsp
  tiles.jsp

WEB-INF/lib/のjar。 struts,tiles,slf4jに含まれているもので揃うハズ。
(tilesから追加したのがほとんど)
ognlは2系が追加されていたら削除(tilesのライブラリはlibもoptionalもほぼすべて必要になったがognlはstrutsの3.0.6を使っている。

aopalliance-1.0.jar
asm-3.3.jar
asm-commons-3.3.jar
commons-beanutils-1.8.0.jar
commons-collections-3.2.jar
commons-digester-2.0.jar
commons-fileupload-1.3.jar
commons-io-2.2.jar
commons-lang-2.4.jar
commons-lang3-3.1.jar
commons-logging-1.1.3.jar
compiler-0.8.4.jar
freemarker-2.3.19.jar
guava-12.0.1.jar
javassist-3.11.0.GA.jar
jsr305-1.3.9.jar
mvel2-2.0.11.jar
ognl-3.0.6.jar
oro-2.0.8.jar
slf4j-api-1.7.5.jar
slf4j-jdk14-1.5.8.jar
slf4j-nop-1.7.5.jar
spring-aop-3.2.0.RELEASE.jar
spring-beans-3.2.0.RELEASE.jar
spring-context-3.2.0.RELEASE.jar
spring-core-3.2.0.RELEASE.jar
spring-expression-3.2.0.RELEASE.jar
spring-web-3.2.0.RELEASE.jar
struts2-convention-plugin-2.3.16.jar
struts2-core-2.3.16.jar
tiles-api-3.0.3.jar
tiles-autotag-core-runtime-1.1.0.jar
tiles-compat-3.0.3.jar
tiles-core-3.0.3.jar
tiles-el-3.0.3.jar
tiles-extras-3.0.3.jar
tiles-freemarker-3.0.3.jar
tiles-jsp-3.0.3.jar
tiles-mvel-3.0.3.jar
tiles-ognl-3.0.3.jar
tiles-request-api-1.0.3.jar
tiles-request-freemarker-1.0.3.jar
tiles-request-jsp-1.0.3.jar
tiles-request-mustache-1.0.3.jar
tiles-request-servlet-1.0.3.jar
tiles-request-servlet-wildcard-1.0.3.jar
tiles-request-velocity-1.0.3.jar
tiles-servlet-3.0.3.jar
tiles-template-3.0.3.jar
tiles-velocity-3.0.3.jar
velocity-1.6.2.jar
velocity-tools-2.0.jar
xwork-core-2.3.16.jar

ソース

com.MySQL.actions.LogoutAction.java

package com.MySQL.actions;

import java.util.Map;

import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;
import org.apache.struts2.dispatcher.SessionMap;
import org.apache.struts2.interceptor.SessionAware;

import com.opensymphony.xwork2.ActionSupport;

@Results({
    @Result(name="success", location="/tiles.jsp")
    })
public class LogoutAction extends ActionSupport implements SessionAware {

   private static final long serialVersionUID = 1L;

   @Action("logout")
   public String execute() throws Exception {

       ((SessionMap<String, Object>)session).invalidate();

       //ListAction dao = new ListAction();
       //List<Object> table  = dao.getTable();
       //((SessionMap<String, Object>)session).put("list", table);
       return "success";
   }

   private Map<String, Object> session;
   public void setSession(Map<String, Object> session) {
       this.session = session;
   }
}

WEB-INF/tiles.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE tiles-definitions PUBLIC "-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN" "http://tiles.apache.org/dtds/tiles-config_2_0.dtd">
<tiles-definitions>
<definition name="Welcome" template="/baseLayout.jsp">
    <put-attribute name="title"  value="スポーツ用品店社員用在庫表メニュー認証画面"/>
    <put-attribute name="header" value="/header.jsp"/>
    <put-attribute name="date" value="/date.jsp" />
    <put-attribute name="main" value="/main.jsp" />
    <put-attribute name="search" value="/search.jsp" />
</definition>
</tiles-definitions>

WEB-INF/web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>stock</display-name>
<context-param>
<param-name>org.apache.tiles.impl.BasicTilesContainer.DEFINITIONS_CONFIG</param-name>
<param-value>/WEB-INF/tiles-definitions.xml</param-value>
</context-param>
<listener>
    <listener-class>
        org.apache.tiles.extras.complete.CompleteAutoloadTilesListener
    </listener-class>
</listener>

<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
<init-param>
    <param-name>actionPackages</param-name>
    <param-value>com.MySQL</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- <filter>
        <filter-name>SessionFilter</filter-name>
        <filter-class>com.MySQL.SessionFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>SessionFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
 -->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>

baseLayout.jsp

<%@page contentType="text/html; charset=UTF-8"%>
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>
<tiles:insertAttribute name="title" ignore="true" />
</title>
</head>
<body>
<tiles:insertAttribute name="header" />
<hr>
<font size = "5">ウエルカム画面</font>
<hr>
<table>
<tr>
<td valign="top">
<tiles:insertAttribute name="date" />
</td>
<td valign="top">
<tiles:insertAttribute name="main" />
</td>
<td valign="top">
<tiles:insertAttribute name="search" />
</td>
</tr>
</table>
</body>
</html>

date.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
date

header.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<h1>Header</h1>

index.jsp

<%@ page language="java" contentType="text/html; charset=Windows-31J"
    pageEncoding="Windows-31J"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>社員認証要求画面</title>
</head>
<body>
<table>
<tr>
<td align="center" valign="middle">
社員ID、パスワードを入力して社員認証してください。<br>
一定時間操作がない場合も自動的にログアウトされるためこの画面が表示されることがあります。
<br>
<s:form method="post" action="logout">
<s:submit value="社員認証画面にGO!" />
</s:form>
</td>
</tr>
</table>
</body>
</html>

main.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
main

search.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<input type="text" value="enter keyword for search"/>
<input type="button" value="dummy search button"/>

tiles.jsp

<%@page contentType="text/html; charset=UTF-8"%>
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<tiles:insertDefinition name="Welcome"/>
編集 履歴 (2)
  • flied_onionさん、長々とご回答ありがとうございます。 早速試してみたんですが、index.jspが表示されないんです。404エラーになってしまいます。(HTTPステータス 404 - /stock/)調査してますので、しばし、お待ち下さい。 -
  • index.jspはどこにいますか?(WebContentsのすぐ下です。WEB-INFの中ではありません。) -
  • flied_onionさん、今だ調査中です。しばらくお待たせします。申し訳ありません。index.jspはWebContentsのすぐ下にあります。。 -
  • flied_onionさん、解決いたしました。回答おこしますので、ご高覧下さい。 -

struts2-tiles-plugin が有効になっていない。

  • Register the tiles listener. This listener will typically either be the standard tiles listener (org.apache.tiles.listener.TilesListener) or the Struts2 replacement (org.apache.struts2.tiles.TilesListener). The latter provides tighter integration with Struts features such as freemarker integration.

  • web.xml

<listener>
  <listener-class>org.apache.struts2.tiles.StrutsTilesListener</listener-class>
</listener>
  • struts.xml
<result-types>
  <result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult"/>
</result-types>
<action name="sample" class="org.apache.struts2.tiles.example.SampleAction" >
  <result name="success" type="tiles">tilesWorks</result>
</action>
  • アノテーションの場合の result
@Result(name="success", type="tiles", location="filename")

追記

以下に最小稼動ソースを記述
[http://qiita.com/asahina_dev/items/7b28638c578a553ade0d]

編集 履歴 (1)
  • http://struts.apache.org/release/2.3.x/docs/tiles-2-plugin.html -
  • http://struts.apache.org/release/2.3.x/docs/tiles-3-plugin.html -
  • alice-asahina 様、ご回答ありがとうございます。
    Struts2.3.15.1をしようしてますので、struts.xmlを書かないで動かそうとかんがえてます。それとも、上記struts.xmlの配備は必要なのでしょうか?
    -
  • web.xmlにlistenerを記述すると、「クラス org.apache.struts2.tiles.strutstileslistener のアプリケーションリ」のエラーがでます。すみません・・・。どうしたらよいでしょうか? -
  • 必要な jar がはいってないんでしょ。 -
  • tiles とか resultType の違うものが必要なのは struts.xml を使う以外方法がなかった気がします。

    -
  • ソース提示ありがとうございます。調査できましたら、ご報告いたします。 -
  • alice-asahina 様、今だ調査中です。しばらくお待たせします。申し訳ありません。 -
  • alice-asahina 様、解決いたしました。回答おこします。ご高覧下さい。 -

struts2初めて触ったんであんまり自信ないんですけど、

LogoutActionのパッケージ名を
com.MySQL から com.MySQL.actions
にしてみてもらっていいですか?

init-param の
<param-value>com.MySQL</param-value>は、そのままでダメだったら
<param-value>com.MySQL.actions</param-value> にしてみてください。

うまくいかなかった場合は戻してください。

もし上手くいった場合

うちで試してみた限り、org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
は、struts2とかactionsとかいう名前が入っているパッケージをActionとして読み込んでくれているような気がします。

サイトではFilterDispatcherをStrutsPrepareAndExecuteFilterに変えましょうぐらいしか書いてなくて、しかも大半のサイトではinit-paramも指定しますが、ゼロコンフィギュレーションの一環で名前で拾うようになってるんじゃないですかね?
(最近のバージョンで変わっただけかもしれませんが)

ですのでパッケージ名の変更だけでうまくいったらたぶん`filter‘の部分は

<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>

だけで動きます。


追記

すいません、指摘し忘れていました。
現在指定しているAction アノテーションがStruts2のものではありません。
Struts2のActionアノテーションの場合は @Action("〜")の形になります。
今回だと@Action("logout") ですね(先頭の/はあっても平気だったと思います)。

別のパッケージのActionアノテーションが指定されているはずです。
(多分 javax.xml.ws.Actionがインポートされているんじゃないでしょうか)

import org.apache.struts2.convention.annotation.Action;

を指定してみてください。

アノテーションの変更だけで状況が変わらない場合は、前述のパッケージ名の変更と併せて試してみてください。


追記2

Resultについてはどうでしょう?直っていますか?
Resultアノテーションはnameとvalueではなく、nameとlocationの様ですが。

とりあえず私の環境ではcom.MySQL.actionsというパッケージ名で提示のindex.jspからlogout.actionを呼ぶところまではうまくいっています。

Filterやtiles、LogoutActionのimportなどに関する情報がないので一旦調査はやめますが、
まずは動くところまで戻られるといいと思います。

Contextの配置中にエラーが出ていなければ、別でActionのパッケージを作成して
/<appname>/actionname.actionで呼び出してみるなど、tilesやfilterを使用しない形でActionを作ってみてはどうでしょうか。
(すでにそういうActionがいるならば特に必要ありません)

※他の情報を上げろという意味ではないです。

編集 履歴 (3)
  • flied_onionさん、ご回答ありがとうございます。
    早速試してみたんですが、index.jspの”社員認証画面にGO!”ボタンを押すと、「No result defined for action com.MySQL.actions.LogoutAction and result success」になってしまいます。引き続き調査してまいります。おってご報告いたします。
    -
  • flied_onionさん、追記ありがとうございます。すみません、修正し忘れました。アノテーションは@Action("logout") で、
    import org.apache.struts2.convention.annotation.Action;
    でコーディングしてます。
    -
  • 他にあるActionもすべて指摘いただいたActionアノテーションの設定になおしましたが、どうしても、「No result defined for action com.MySQL.actions.LogoutAction and result success」になってしまいます。 -
  • つまりどのActionもうまく動いていないという事ですね? -
  • LogoutActionのすべてのソースを提示します。よろしくお願いします。 -
  • 現在のコードは自分で1からくみ上げたプログラムです。ただしstruts2.2.1.1でそのときはコーディングしました。
    そのコードをstruts2.3.1.5で動かそうとしています。
    -
  • tiles.jspとtiles.xmlを追記いたします。ご高覧下さい。 -
  • 一旦、tilesやfilterを使用しない形でActionを作ってみます。
    しばし、お待ち下さい。
    -
  • tilesやfilterを削除してうごかしてみたんですが、「No result defined for action com.MySQL.actions.LogoutAction and result success」になってしまいます。 -
  • さしつかえなければ、flied_onionさんのindex.jspとLogoutAction.javaのコードとプロジェクト階層をみせていただけないですか?もしかして、ぼくのindex.jspの配置がおかしいのかなと思ってます。 -
  • 私の方でもtilesを使える様にして試そうとしているところですが、なかなか時間がとれなくてまだ途中です。
    今日の夜になると思いますが、tilesもfilterも無い状態の階層情報を提示します。
    -
  • alice-asahina 様ご指定の、「struts2-tiles3-plugin-2.3.16.jar」 「struts2-tiles-plugin-2.3.16.jar」を配備してweb.xmlにorg.apache.tiles.extras.complete.CompleteAutoloadTilesListenerを記述すると良いようでした。 -
  • お二人にご教授いただけなければ、できませんでした。感謝いたします。 -
  • libから「javassist-3.7.ga.jar」「freemarker-2.3.15.jar」「struts2-tiles3-plugin-2.3.16.jar」 「struts2-tiles-plugin-2.3.16.jar」を削除しても稼動致しました。細部まで追求出来なくてすみませんでした。回答は編集いたしました。 -
  • flied_onionさん,
    slf4j-jdk14-1.5.8.jarは、slf4j-jdk14-1.6.4.jarでなければ動かないようです。回答も編集しておきました。
    -

flied_onionさん、alice-asahinaさん、大変お手数をおかけしております。
flied_onionさん、お忙しい中ソースと階層掲載して頂きましてありがとうございました。
alice-asahinaさん、最小稼動コード掲載して頂きまして、有難うございます。

只今、エラーが消えlogout.actionがbaseLayout.jspを表示しました。
現在のソースと階層を掲載させていただきご報告致します。
この度も誠に有難うございます。感謝いたします。

環境

Win 7 64bit
eclipse4.2
Tomcat 7 ( pleiades 付属のxamppについてるTomcat )
struts 2.3.16
tiles 3.0.3    - https://tiles.apache.org/download.html
slf4j 1.7.5    - http://www.slf4j.org/download.html

プロジェクト実階層

動的Webプロジェクト (モジュールバージョン 3.0)
ターゲットランタイム Apache Tomcat v7.0
Java リソース/
  src/
    com.MySQL.actions/
      LogoutAction.java

WebContent/
  WEB-INF/
    lib/
      (後述)
    tiles.xml
    web.xml
  baseLayout.jsp
  date.jsp
  header.jsp
  index.jsp
  main.jsp
  search.jsp
  tiles.jsp

配備LIB(jar)

aopalliance-1.0.jar
asm-3.3.jar
asm-commons-3.3.jar
commons-beanutils-1.8.0.jar
commons-collections-3.2.jar
commons-digester-2.0.jar
commons-fileupload-1.3.jar
commons-io-2.2.jar
commons-lang-2.4.jar
commons-lang3-3.1.jar
commons-logging-1.1.3.jar
compiler-0.8.4.jar
freemarker-2.3.19.jar
guava-12.0.1.jar
javassist-3.11.0.GA.jar
jsr305-1.3.9.jar
mvel2-2.0.11.jar
ognl-3.0.6.jar
oro-2.0.8.jar
slf4j-api-1.7.5.jar
slf4j-jdk14-1.6.4.jar
slf4j-nop-1.7.5.jar
spring-aop-3.2.0.RELEASE.jar
spring-beans-3.2.0.RELEASE.jar
spring-context-3.2.0.RELEASE.jar
spring-core-3.2.0.RELEASE.jar
spring-expression-3.2.0.RELEASE.jar
spring-web-3.2.0.RELEASE.jar
struts2-convention-plugin-2.3.16.jar
struts2-core-2.3.16.jar
tiles-api-3.0.3.jar
tiles-autotag-core-runtime-1.1.0.jar
tiles-compat-3.0.3.jar
tiles-core-3.0.3.jar
tiles-el-3.0.3.jar
tiles-extras-3.0.3.jar
tiles-freemarker-3.0.3.jar
tiles-jsp-3.0.3.jar
tiles-mvel-3.0.3.jar
tiles-ognl-3.0.3.jar
tiles-request-api-1.0.3.jar
tiles-request-freemarker-1.0.3.jar
tiles-request-jsp-1.0.3.jar
tiles-request-mustache-1.0.3.jar
tiles-request-servlet-1.0.3.jar
tiles-request-servlet-wildcard-1.0.3.jar
tiles-request-velocity-1.0.3.jar
tiles-servlet-3.0.3.jar
tiles-template-3.0.3.jar
tiles-velocity-3.0.3.jar
velocity-1.6.2.jar
velocity-tools-2.0.jar
xwork-core-2.3.16.jar

com.MySQL.actions.LogoutAction.java

package com.MySQL.actions;

import java.util.Map;
import java.util.List;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.dispatcher.SessionMap;
import org.apache.struts2.interceptor.SessionAware;
import com.opensymphony.xwork2.ActionSupport;

@Results({ 
    @Result(name = "success", location = "/tiles.jsp"),
}) 
public class LogoutAction extends ActionSupport implements SessionAware {

    private static final long serialVersionUID = 1L;

    @Action("logout")
    public String execute() throws Exception {

        ((SessionMap<String, Object>)session).invalidate();

        ListAction dao = new ListAction();
        List<Object> table  = dao.getTable();
        ((SessionMap<String, Object>)session).put("list", table);
        return "success";
    }

    private Map<String, Object> session;
    public void setSession(Map<String, Object> session) {
        this.session = session;
    }

}

WEB-INF/tiles.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE tiles-definitions PUBLIC "-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN" "http://tiles.apache.org/dtds/tiles-config_3_0.dtd">
<tiles-definitions>
<definition name="Welcome" template="/baseLayout.jsp">
    <put-attribute name="title"  value="スポーツ用品店社員用在庫表メニュー認証画面"/>
    <put-attribute name="header" value="/header.jsp"/>
    <put-attribute name="date" value="/date.jsp" />
    <put-attribute name="main" value="/main.jsp" />
    <put-attribute name="search" value="/search.jsp" />
</definition>
</tiles-definitions>

WEB-INF/web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">


<display-name>stock</display-name>
<context-param>
<param-name>org.apache.tiles.impl.BasicTilesContainer.DEFINITIONS_CONFIG</param-name>
<param-value>/WEB-INF/tiles.xml</param-value>
</context-param>

<listener>
    <listener-class>
        org.apache.tiles.extras.complete.CompleteAutoloadTilesListener
    </listener-class>
</listener>

<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
<init-param>
    <param-name>actionPackages</param-name>
    <param-value>com.MySQL.actions</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
        <filter-name>SessionFilter</filter-name>
        <filter-class>com.MySQL.actions.SessionFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>SessionFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>


<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>

tiles.jsp

<%@page contentType="text/html; charset=UTF-8"%>
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%>
<%@ taglib prefix="tilesx" uri="http://tiles.apache.org/tags-tiles-extras"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<tiles:insertDefinition name="Welcome"/>

index.jsp

<%@ page language="java" contentType="text/html; charset=Windows-31J"
    pageEncoding="Windows-31J"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>社員認証要求画面</title>
</head>
<body>
<table>
<tr>
<td align="center" valign="middle">
社員ID、パスワードを入力して社員認証してください。<br>
一定時間操作がない場合も自動的にログアウトされるためこの画面が表示されることがあります。
<br>
<s:form method="post" action="logout">
<s:submit value="社員認証画面にGO!" />
</s:form>
</td>
</tr>
</table>
</body>
</html>
編集 履歴 (2)
  • みたところライブラリに私が指定したもの以外のものが入っていたんではないでしょうか(私の指定と過不足なく一緒にしてました?)。lib以下に削除するとか追加するとかしているうちによくわからないけど動いたという状態でしょうか。
    現状でも同じとか競合するライブラリが複数入っているように見受けられます。自分で納得してこの状態ならいいんですが、そうでないなら一旦整理すべきです。
    -
  • そうしないとまたエラーでちゃいますよ。
    とりあえずはtilesはstrutsプラグインでいくのか、tiles単体で行くのか決めたほうがいいですね。asahina-aliceさんの方が一般的だとは思いますが、こればっかりは作り次第なので。
    -
  • あ、でも「struts2-tiles3-plugin-2.3.16.jar」
    「struts2-tiles-plugin-2.3.16.jar」の二つが多いだけなんですね。それ以外(lang,freemarker,javasist)は私のミスでした。ごめんなさい。
    -
  • libからjavassist-3.7.ga.jarとfreemarker-2.3.15.jarは削除してみて動作するなら削除してください。langとlang3は両方残しておいてください。
    -
  • 今も「struts2-tiles3-plugin-2.3.16.jar」 「struts2-tiles-plugin-2.3.16.jar」が無いと動かないですか?(他箇所から参照されていれば当然エラーになるので、無いと動かない可能性は十分ありますが、web.xmlの修正とこの2つのjarの追加を同時にやっていたら無駄に追加されている可能性もあるので)。片方ずつ削除して試してみたほうがいいような。 -
  • @flied_onion ちなみに レイアウト名で返す場合に plugin が必須で tiles.jsp という余分なファイルが不要になるのだよ・q・
    -
ウォッチ

この質問への回答やコメントをメールでお知らせします。