Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

jsp上でのエラー判別

こんにちは。

jsp上でvalidationでエラーがなかった場合、
というif文を書きたいのですが、どのように書けばいいのでしょうか?
<html:errors/>の有無で判断しようと考えたので、ソースで展開された状態を見ようと思ったのですが、エラーメッセージが書かれているだけでした。

エラーがあったときにformにエラーがあった、というフラグを立てる、という方法以外で何かあれば教えてください・・。

11

回答

84452

閲覧

11件の回答

評価

0

1. なんのvalidationなんでしょうか?
2. formにエラーがあった云々というのは、HTML上のformタグの中にエラーフラグを入れたいということですか?

評価

0

言葉が足りなくて申し訳ありません。

<html:text property="a"/>
<html:submit value="ok"/>

</**ここにエラーがなかった場合、という条件を入れたい**/>

//処理A//

</>

この状態でsubmitした後、(遷移先は同一jsp)
FormのValidateメソッドで検証を行います。
エラーが存在しなかった場合は処理Aを行いたいのです。

また、formにエラーがあった、というのは
textフィールドaに入力された値が検証でエラーとなった場合、errorというフラグをtrueにし、formクラスにセットし

<logic:equal name="form" property="error" value="true">
//処理//
</logic:equal>

という判定はできるだけ避けたい、ということです。


評価

0

>言葉が足りなくて申し訳ありません。
情報は正確に伝えないと、理解してもらえませんよ。
JSPに<html:errors>なんてタグはありません。

<html:errors>
を使用するさいにエラーオブジェクトか何か使っているはずなので、
(ソースが無いので判りませんが)
これで判断すればいいんじゃないですか?

評価

0

<html:errors>はstrutsのカスタムタグですね・・・。ひろちゃんさんもおっしゃってますが、情報が正確に伝わらないと、回答者は答えれません。
「何を使用して」という情報は回答者にとって必要不可欠です。※JAVAのVersionやWebコンテナは何を使用しているかEclipse使用有無など

とりあえずこの辺が役に立つのかな?

http://www.stackasterisk.jp/tech/java/strutsSec02_01.jsp

評価

0

レスありがとうございます。
開発環境は
java1.4/tomcat5.0/eclipse3.0/strutsです
今後気をつけます。

教えていただいたサイト拝見いたしました。
エラーオブジェクトがリクエストにセットされているとおもうのですが、キー値がわからずとれません。
validateメソッドの中で
エラーをセットする時は

errors.add("error",new ActionMessage("error.mes"));

という処理を行っています。
jspのjavaになった後のソースを見てみたのですが
動きが理解できませんでした・・。

<logic:notEmpty name="error">

<logic:notEmpty name="errors">

など試してみました。

どなたかご教授ください

評価

0

Strutsは使ってないので予想です。

errorsは、<logic:notEmpty>と同じスコープにあるんでしょうか。
なければ取れないと思うんですが。
例えば、validationの結果をrequestに突っ込んでおいて、<logic:notEmpty>のスコープをrequestにしてやるとか(適当に言ってます)、そう処理が必要なんじゃないかと。

評価

0

やりたいことは解ります。
<html:errors/>はエラーのリストを吐き出してくれるけど、エラーのリストが空だった場合は、エラーがなかったことを出したい。
ということだと思います。

<html:errors/>をベースにカスタムTagLibを作る・・たぶん<html:errors/>自身はカスタムタグとは呼ばないんじゃなかったかな?と 自信はないけど
とか

要は<html:errors/>から吐き出されなかったときに別のメッセージなりを出したいわけですから、html:errorsからリストが空であることが取り出せるプロパティ?があるのか、
ないとすれば、JSPに来る前に別途リクエスト変数にフラグを立てておくとか・・html:errorsの中で保持しているリストの数でも・・して、logic:equalみたいなやつかな?で、出す出さないを<html:errors/>に並べて書いておいてやるとか

もし、strutsとかhtml:errorsとかなかったら、自分でちまちま書いているところだと思いますけど、そのイメージは浮かんでいますよね?
要はまず、html:errorsだけを利用してそれが実現できるかどうかを調べてみることで、調べてみないまま、適当にコード・・logic:notEmptyとかをコードと呼ぶのかどうかは・・だけ並べても、無駄に時間だけが過ぎて行くだけかと。

評価

0

まあさん、mioさん回答ありがとうござます。

まあさんのおっしゃってる通りのことがやりたかったです。で、一応解決しました。方法としては
Formのvalidateメソッドの中で
return errorsする直前に
ActionErrorsのisEmpty()というメソッドを使用し(名前の通り空かどうか判別します)空だった場合requestにフラグとなる値をセットし、jsp上でその値が存在するかどうかを判別し表示の切り替えを行うようにしました。

googleで調べても<html:errors>がどのように展開されるか見つけることができなかったので・・。
HTMLソース上で消滅してるのが不思議です・・。
javaに展開されたjspのソースを見てみたところ、なにやらメソッドを呼び出して処理を行っている・・ということはわかったのですが。

とりあえず解決しました。
ありがとうございました^^

評価

0

>HTMLソース上で消滅してるのが不思議です・・。
いや…これは当たり前です。
一部はJavaScriptとして吐き出されますが、HTMLは最終形態であり、分かるのは判定の結果だけです。
初期表示に必要なものは、HTMLになった時点でもう判定が終わっています。
終わった判定が盛り込まれていても、仕方ないでしょう。

評価

0

>HTMLソース上で消滅してるのが不思議です・・。

mioさんが回答済みでもありますけど、
JSP=HTMLでもないし、JSP→HTMLでもないです。
JSP→JSPから生成されたJavaコード→Javaコードが実行された結果のHTML
という感じですね。
まず、この関係が解ってないといけないだろうと思うし、JSPとかは暗黙にそれが解ったものとして提供されているものということになるでしょう。
だから、大抵突然JSPを使い始めたり・・だったりするだろうかと思ったりしますけど、本当はちまちまコードを書いていた。そしてそれは十分に理解できた。それをもっと楽にやろう・・というところでJSPとかstrutsとか使おうか。と出てくることになるものだろうかと思います。

JSPにはHTMLに比べて色々拡張された実装ができますが、HTMLでそれらを扱うことはできないのでHTMLに出てくることはないです。
それらはJavaコードとしてJSPから生成されたコードが処理しています。

例えばhtml:radioとかはHTMLとして処理されるべきものがあるからHTMLの中に現れる部分がありますが、そこにはHTMLで扱えるものしか出て来ないですし、HTMLに出すものがないものであれば何も出て来ないです。

評価

10

ずい分古い記事へのレスですが・・・
同様の事象を知らべていたので・・・

<logic:messagesNotPresent>というstrutsタグを使えば、
やりたいことは一発でした!

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。