- PR -

Strutsで条件にあった場合のみボタンを表示したい

1
投稿者投稿内容
koji
大ベテラン
会議室デビュー日: 2002/12/25
投稿数: 100
投稿日時: 2004-02-16 15:58
Struts1.1でWebアプリケーションを作成しています。

strutsタグでファイルの拡張子
<bean:write name="ddata" property="filetype"/>
がxlsかdocの場合のみ、
<html:form action="Detail"><html:submit value="詳細"/></html:form>
というフォームを表示させたいのですが、可能でしょうか?

やろうとしている事は、ある文書データ(タイトル、作成者、作成日、ファイル名、
拡張子、、、等)を、1行を表形式で表示し、ファイル名の横に拡張子がdocかxls
の場合のみ「詳細」というラベルのついたボタンを表示して、ボタンが押されたら
その文書を表示するといった感じです。

<bean:write name="ddata" property="filetype"/>
上のddataは文書データを格納したオブジェクトで、このjspページをフォワードす
る前に実行されるアクションで作成してセッションに保存しています。

<logic:equal>を使ってみましたがname属性にどのように指定してよいかわかりま
せん。
ふーばー
大ベテラン
会議室デビュー日: 2003/06/05
投稿数: 163
投稿日時: 2004-02-16 16:25
引用:

<bean:write name="ddata" property="filetype"/>
上のddataは文書データを格納したオブジェクトで、このjspページをフォワードす
る前に実行されるアクションで作成してセッションに保存しています。

<logic:equal>を使ってみましたがname属性にどのように指定してよいかわかりま
せん。


bean:write と同じでいいはずですよ。自分でやってみた場合は、こんなふうに
書いたけど***になりました。と、書いておくとコメントされやすいです。
masa
常連さん
会議室デビュー日: 2003/01/14
投稿数: 37
投稿日時: 2004-02-16 16:30
ddataクラスに

public boolean isAllowFiletype() {
  return getFiletype().equals("xls") || getFiletype().equals("doc");
}

のようなメソッドを追加して、

<logic:equal name="ddata" property="allowFileType" value="true">
  <html:form action="Detail"><html:submit value="詳細"/></html:form>
</logic:equal>

とすればOKじゃないでしょうか。
動作未確認ですが。
koji
大ベテラン
会議室デビュー日: 2002/12/25
投稿数: 100
投稿日時: 2004-02-16 17:25
ふーばーさん、masaさん、ありがとうございます。

ふーばーさんへ
>こんなふうに 書いたけど***になりました。と、書いておくとコメントされやすいです。
そうですね、それを書かなければ教えてもらいようがないですね。ありがとうございます。

>bean:write と同じでいいはずですよ。
おっしゃるとおりでした。何か大きな勘違いをしていました。
しかし試しにエクセルファイルのみに限定して、
<logic:equal name="ddata" property="filetype" value="xls">
<html:form action="/Detail"><html:submit value="詳細"/></html:form>
</logic:equal>
のようにやってみましたが、エラーが発生し、画面が真っ白になりました。
logic:equalの条件に合わない時は正常動作するので、
<html:form action="/Detail"><html:submit value="詳細"/></html:form>
この部分がおかしいのだと思います。もっと探ってみます。発生したエラーは
以下のとおりです。

17:20:38,171 ERROR [Engine] ApplicationDispatcher[/dms] サーブレット jsp のServl
et.service()が例外を投げました
org.apache.jasper.JasperException: Cannot retrieve definition for form bean null
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper
.java:254)
以下たくさんエラーメッセージが続く。。。。

ちなみに実際のコードは以下のようになっております。
<bean:define id="doc_act">
/Documentref_doc.do?docid=<bean:write name="ddata" property="docid"/>
</bean:define>
<span id="LabelFilename">
<bean:write name="ddata" property="filename"/>
<logic:equal name="ddata" property="filetype" value="xls">
<html:form action='<%= doc_act %>'><html:submit value="詳細"/></html:form>
</logic:equal>


masaさんへ

このようなやり方あるとは知りませんでした。非常に勉強になります。
property="allowFileType"

property="isAllowFiletype"
の間違いでしょうか?このように修正して実行してみましたところ、
やはりふーばーさんの時と同じようにエラーが発生し画面が真っ白になります。
エラーは以下のような感じで

17:15:30,257 ERROR [Engine] ApplicationDispatcher[/dms] サーブレット jsp のServl
et.service()が例外を投げました
org.apache.jasper.JasperException: Exception accessing property isAllowFiletype
for bean ddata: java.lang.NoSuchMethodException: Unknown property 'isAllowFilety
pe'
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper
.java:254)
以下たくさんエラーメッセージが続く。。。。
masa
常連さん
会議室デビュー日: 2003/01/14
投稿数: 37
投稿日時: 2004-02-16 18:06
>org.apache.jasper.JasperException: Cannot retrieve definition for form bean
> null
このエラーはおそらく、struts-config.xmlのactionマッピングに
FormBean名を指定していないから起こるものだと思います。
つまり
<action path="hogehoge" type="hoge.hogeAction" name="これを指定していない" />
のではないでしょうか?
 
ちなみに、
property="allowFileType"
は書き間違いではありません。
戻り値がbooleanのJavaBeansのゲッターは、isXXXですので。


koji
大ベテラン
会議室デビュー日: 2002/12/25
投稿数: 100
投稿日時: 2004-02-16 18:47
masaさん、ありがとうございます。

allowFileTypeで正しかったですか。なるほど。

> <action path="hogehoge" type="hoge.hogeAction" name="これを指定していない" />
> のではないでしょうか?
おっしゃるとおりでした。Actionだけ指定して、Formは使わないのでいらないかと
思ったのですがそうではないんですね。使うように変更しました。
ふーばーさんに教えてもらったやつのエラーも同じなので、これが原因ですね!
 
しかしあのエラーだけでそこまでわかるなんてすごい。。。自分にはあのエラーメッセージ
からはさっぱり検討がつきませんが。。。

で、allowFileTypeをallowFiletypeに、その他を修正し実行したところ、正常に表示され
るようになりました。ありがとうございました!
1

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