tomcat7 + struts2 でwebアプリ(11) メモ

アクション呼び出し前のFilterDispatcherあたりでNullPointerException

アクション呼び出し前の事前処理でNullPointerExceptionが発生し、
アクションのexecuteメソッドが呼び出されない問題。

基本的な設定やファイル名について確認しても解決しなかったので、
struts.xmlが配置されているフォルダが「Javaソースフォルダ」か確認したところ、
Eclipse上から「Javaソースフォルダ」として認識されていなかった。
新規作成で「Javaソースフォルダ」を作成し、そちらにstruts.xmlを移動したところ、
アクションが実行されるようになった。

indexからアクションへ自動遷移

<meta http-equiv="refresh" content="0;URL=<s:url action="ActionName"/>">

content直後の数値で遷移するまでの秒数を指定可能。

エラーページで例外のスタックを出力

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<link rel="stylesheet" href="contents/css/style.css" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>エラー</title>
</head>
<body>
<div class="contents">
	<div class="errorMessage">
		${exception.message}
		<div>
			${exceptionStack}
		</div>
	</div>
	<div>
		<a href="index.jsp">再読み込み</a>
	</div>
</div>
</body>
</html>

設定ファイル(.properties)の作成

下記リンクが詳しい。
http://struts.apache.org/docs/localization.html
http://www.mkyong.com/struts2/struts-2-resource-bundle-example/

アクション固有、パッケージ固有、グローバルの順番に設定ファイルを読みに行くようです。
今回のやり方であれば、struts.xmlに記述は不要。

指定パスのファイル一覧を取得

	public ArrayList<Path> createFileList(String path) throws Exception{
		ArrayList<Path> pathList = new  ArrayList<Path>();
		try(DirectoryStream<Path> ds = Files.newDirectoryStream(new File(path).toPath())){
			for(Path p : ds){
				pathList.add(p);
			}
		}
		return pathList;
	}

最終的にファイルとして扱うのであれば、いちいちPathに変換する必要はない気がします。