[Seasar-user:10570] Re: [Teeda] ValidatorChainの利用時のsetTargetの動作について

山下 真里 [E-MAIL ADDRESS DELETED]
2007年 9月 17日 (月) 15:53:35 JST


小林様

ご回答ありがとうございます。
山下真里です。

私のメールの内容が悪く、ご迷惑をおかけしております。

Teeda HTML Example の validator/dynamicValidator.htmlを
下記のようにした記述しました。
targetに指定されたボタンのみ(doEntryとdoExec)に対してのみ
バリデーションを有効にしたいと考えているのですが、
doAddに対してもバリデーションが有効になってしまいます。
やりたいこととしましては、setTargetを利用して、
押されたボタンによってValidatorの有無を切り替えたいと考えております。

私の環境では、テキストボックス(id="aaa")に 値(11)を入力し、
id="doAdd" のサブミットボタンを押すと、「値(id=aaa)が短すぎます。
5桁以上で入力してください。」と表示されます。 
そこで、setTargetの値がValidatorChainを利用した場合、
適用されるのか、分らなく投稿させていただきました。

ご迷惑をおかけしますが、よろしくお願いいたします。

また、メールの件、大変ご迷惑をおかけしておりました。
Web メールを利用して投稿等をさせていただいておりましたが、
クライアントメーラーを利用し、今後、投稿をさせていただこうと
思っております。今まで、大変ご迷惑をおかけしました。

山下真里


=== dynamicValidator.html =============================================

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Dynamic Validator</title>
<style>
.onTeedaError {
	background-color: #FFCCCC;
}
</style>
</head>
<body>
<form id="validatorForm">
<div>
<span id="allMessages"></span>
</div>
<input type="text" id="aaa"/><br/><br/>
<input type="text" id="bbb"/><br/><br/>
<input type="submit" id="doAdd" value="add"/>
<input type="submit" id="doExec" value="execute"/>
<input type="submit" id="doEntry" value="entry" />
</form>
</body>
</html>

=== DynamicValidatorPage.java =========================================
package examples.teeda.web.validator;

import javax.faces.internal.ValidatorChain;
import javax.faces.validator.Validator;

import org.seasar.teeda.extension.validator.TLengthValidator;
import org.seasar.teeda.extension.validator.TRequiredValidator;

public class DynamicValidatorPage {

	// これらは動的なValidatorが定義されている場合、無視される
	public static final String aaa_TRequiredValidator = null;

	public static final String aaa_TLengthValidator = "minimum = 1";

	public static final String bbb_TRequiredValidator = null;

	public static final String bbb_TLengthValidator = "minimum = 1";

	private Integer aaa;

	private Integer bbb;

	public Validator getAaaValidator() {
		return createValidator();
	}

	public Validator getBbbValidator() {
		return createValidator();
	}

	protected Validator createValidator() {
		ValidatorChain chain = new ValidatorChain();
		TRequiredValidator tval = new TRequiredValidator();
		tval.setTarget("doEntry,doExec");
		chain.add(tval);
		TLengthValidator lengthValidator = new TLengthValidator();
		lengthValidator.setMinimum(5);
		lengthValidator.setTarget("doEntry,doExec");
		chain.add(lengthValidator);
		return chain;
	}

	public void doExec() {
	}

	public Integer getAaa() {
		return aaa;
	}

	public Integer getBbb() {
		return bbb;
	}

	public void setAaa(Integer aaa) {
		this.aaa = aaa;
	}

	public void setBbb(Integer bbb) {
		this.bbb = bbb;
	}

}




> 2 つめのボタンを追加して,DynamicValidatorPage で
> target を設定して試してみましたが,ちゃんと
> 効いているように見えます.
> # 1.0.10 および最新のトランクとも問題なし.
> 
> target が有効にならないというのは,具体的に
> どういう状況でしょうか?
> target に指定されている doConfirme または
> doConfirm2 にバリデータが適用されないのでしょうか?
> それとも,doConfirme でも doConfirm2 でもない
> ボタンを押しても適用されてしまうのでしょうか?
> 
> 可能なら Teeda HTML Example の dynamicValidator を
> ベースに再現するケースを作成して頂けると助かります.
> 
> 
> P.S.
> 以下を見てもらえると分かると思うのですが,
> 
> http://ml.seasar.org/archives/seasar-user/2007-September/thread.html
> 
> 山下さんの返信が常に新規スレッドになってしまっています.
> References: ヘッダが付いていないからなのですが,
> やり取りを追いかけるのがとても苦痛になってしまうので,
> できればちゃんと返信になるように (References: が
> 付くように) して頂けないでしょうか.
> 
> 
> --
> <signature>
>    <name>Koichi Kobayashi</name>
>    <e-mail>[E-MAIL ADDRESS DELETED]</e-mail>
> </signature>
> 
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user


-- 
山下 真里 <[E-MAIL ADDRESS DELETED]>




Seasar-user メーリングリストの案内