- PR -

Validationのエラーを表示させる画面について質問

1
投稿者投稿内容
ffr
会議室デビュー日: 2008/08/25
投稿数: 2
投稿日時: 2008-08-25 16:03
ffrと申します。
java、Strutsの初心者なのですが、
Validationのエラーを表示させる画面について質問させていただきます。

バリデーションのエラーで入力画面と同じ画面を表示させる場合にselectの選択要素optionsCollectionの
colletionを引き継ぐことはできますでしょうか?

環境:
Struts 1.3
ibatis 2.3.0
Eclipse 3.2
JDK 1.5
JavaScriptは使用しておりません
validationは入力画面のtextareaから入力する値にmaxlengthをかけています。

現在Validationのエラーを表示させる画面を表示させる処理で
javax.servlet.jsp.JspException: 指定されたコレクションの取得に失敗しました
at org.apache.struts.taglib.html.OptionsCollectionTag.doStartTag(OptionsCollectionTag.java:181)
・・・が出ている状態で
html:select property="template">
<html:optionsCollection name="MailSendForm" property="tmpTitleOp" />
がうまく引き継げていないためエラーが起こっているようです。

Validation.xmlの記述
コード:
    <formset>
    	<!-- メール本文の検証項目 -->
	<form name="/MailContent">
            <field property="mailtext" depends="maxlength">
		    <var>
	            	<var-name>maxlength</var-name>
	                <var-value>2000</var-value>
	            </var>
                <msg name="maxlength" key="error.maxlength" />
                <arg position="0" key="mailText" />
                <arg position="1" key="mailTextMaxlength" />
            </field>
		</form>	
    </formset>



入力画面・バリデーションエラー後の遷移するエラーのJSP
コード:
<%@ page contentType="text/html; charset=Shift_JIS" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="/tags/struts-logic" prefix="logic" %>
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
<bean:define type="jp.co.mail.forms.MailSendForm" id="MailSendForm" name="MailSendForm"/>
<?xml version="1.0" encoding="Shift_JIS" ?>
<!DOCTYPE html PUBLIC "-//OPENWAVE//DTD XHTML 1.0//EN" "http://www.openwave.com/DTD/xhtml-basic.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
	<head>
		<link rel="stylesheet" href="./css/data.css" type="text/css">
		<meta http-equiv="Content-type" content="text/html; charset=Shift_JIS">
		<title>メ-ル一括送信システム</title>
	</head>
	<body>
		<html:form action="/MailContent">
			<b>メール文面入力</b>
			<br/>
			<html:errors/>
			<font color="red">送信対象者:<bean:write name="MailSendForm" property="count" />名</font>
			<br/>
			<p>
				お客様名:<br/>
					<bean:write name="MailSendForm" property="clientName" />
					<html:hidden name="MailSendForm" property="clientId" />
				<br/><br/> 
				誕生月:<br/>
					<bean:write name="MailSendForm" property="birthmonthlabel" />
					<html:hidden name="MailSendForm" property="birthmonth" />
					<br/><br/> 
				最終来店日:<br/>
					<bean:write name="MailSendForm" property="lastvisitlabel" />
					<html:hidden name="MailSendForm" property="lastvisit" />
				<br/><br/>  
				文面:テンプレート<br/>
					<html:select property="template">
		            			<html:optionsCollection name="MailSendForm" property="tmpTitleOp" />
	                		</html:select>
	                		<html:hidden name="MailSendForm" property="template" />       
					<html:submit property="go" value="go" />
				<br/><br/> 
				<html:textarea name="MailSendForm" property="mailtext" rows="15" cols="16" />
			</p>
			<div align="center">
				<html:submit property="mailconf" value="送信確認" />
			</div>
		</html:form>
			<html:form action="/MailSend">
			<html:hidden name="MailSendForm" property="clientId" />
			<html:hidden name="MailSendForm" property="birthmonth" />
			<html:hidden name="MailSendForm" property="lastvisit" />
			<div align="center">
				<html:submit value="戻る" />
			</div>
		</html:form>
		<p>
			<html:link action="/Back">Topに戻る</html:link>
			<html:link action="/Logout">ログアウト</html:link>
		</p>
	</body>
</html>


回答のほどよろしくお願いします。
まぐろ
会議室デビュー日: 2008/11/04
投稿数: 1
投稿日時: 2008-11-04 13:14
struts的に合っているかはわかりませんが、
自分はActionFormでコレクション配列を作るようにして、
それをActionから呼び出すことで同様の問題を解消しました。

ActionForm--------------------

private String[] hoge = null;

public String[] getHoge() {
/*
* 配列を作る処理
*/
return hoge;
}
public void setHoge(String[] hoge) {
this.hoge = hoge;
}

Action------------------------

form.setHoge(form.getHoge());



あとはコンテナ起動時に配列を作り、それをapplicationコンテキストに保持するとか・・・。

そんな感じではいかがでしょう。
ffr
会議室デビュー日: 2008/08/25
投稿数: 2
投稿日時: 2008-11-07 23:34
回答ありがとうございます。

回答の様にActionFormで配列作成
をする方法で、解決いたしました。
1

スキルアップ/キャリアアップ(JOB@IT)