cafegale(LeafCage備忘録)

LeafCage備忘録(はてなダイアリー)と統一しました。

strutsの導入


Download a Release
よくわからないからとりあえずフルバージョンを入れといた。
バージョンは1.3*1


プラグイン

メモってるだけで使っていないよ。

トラブルシューティング

JSP ファイル "/WEB-INF/struts-html.tld" が見つかりません」と言われる
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>

でなく、

<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>

を使え!

またはstrutsのソースのtaglib/src/main/resources/META-INF/tld/以下のファイルをコピーしてくる。

作成の基本

  • Tomcatプロジェクトとして作成
  • Struts/lib/以下の必要なライブラリjarをWEB-INFのlibにコピーし、ビルドパスを通す
  • struts-config.xmlは以下の順で記す
    • data-souces, form-beans, global-exceptions, global-forwards, action-mappings, controller, message-resources, plug-in
      • この順番に不満がある。なんでglobal-forwardsがform-beansとaction-mappingsの間にあるん?とか
    • エレメントのscope属性は省略時は"session"になってしまうようなので、略さず"request"を指定しよう
      • この罠に嵌ってすごく悩んだ。帰宅時間が1時間半遅れた。悔しい

機能

リストから要素抜き出して表示

<table border="1">
  <tr>
  <th>図書CD
  <th>書名
  <th>著者
  <th>出版社
  <th>ISBN
  <th>登録種別
  <th>所有図書館
  <th>棚番号

  <%
  List<Book> results = (List<Book>) request.getAttribute("books");
  %>
  <logic:iterate id="result" collection='<%=results %>'>
    <tr>

      <td><bean:write name="result" property="bookname" />
      <td><bean:write name="result" property="author" />
      <td><bean:write name="result" property="publisher" />
      <td><bean:write name="result" property="isbn" />
      <td><bean:write name="result" property="kind" />
      <td><bean:write name="result" property="ownerLibCd" />
      <td><bean:write name="result" property="shelfnum" />
  </logic:iterate>
</table>
  • という具合にもっと簡潔に書ける

つまりfor("result" : "books")

バリデーション1.3版

Struts-Validatorを使う〜はじめに - 株式会社アークシステム(infoARK)

  • validation.xmlを作成する
  • メッセージ表示用リソースファイルを修正する(application.propertiesファイルみたいな)
  • ActionFormの代わりにValidatorFormを継承する
  • struts-config.xmlにValidatorPlugInを加える設定

HTTPステータス 404 - サーブレット action が利用できません | 作業日記
これのように、バリデーションはvalidation.xmlが少し書き方を誤っているだけで全てのサーブレットのactionが動かなくなる。

  • 数値必須チェックについての注意
    • 数値であっても、ActionFormでは文字列として定義すること。そうしないとrequierdが働かない(0で初期化されてしまうため)

integerやintRangeは値が空欄(空文字列)の場合はエラーにならないので、 必須チェックもしたい場合には "required,integer,intRange" とする必要があります。

http://www.geocities.jp/misurano/ssja/struts-config.html

Eclipseではない環境用の設定ページを見てしまって迷走(このセンテンスは忘れてください)

2.Strutsの配置
ダウンロードしたファイルを解凍して、webappsディレクトリ配下にあるstruts-example.warファイルを$CATALINA_HOME\webapps配下に設置します。※$CATALINA_HOMEはTomcatのインストールディクトリを表します。

WARファイルとは、Webアプリケーションで使用されるファイルをコンテキストごと一まとめに圧縮したものです。jarコマンドで作成できます。WARファイルをアプリケーションベースディレクトリ(ここでは$CATALINA_HOME\webapps)に配置すると、自動的にWARファイルが展開されWebアプリケーションの配置(デプロイ)が行われます。


3.動作確認
Tomcatを起動させ、WARファイルの展開を行います。
http://localhost:8080/struts-examples/にアクセスし、以下の画面が表示されたらStruts配置の成功です。リンクをたどり、いろいろなサンプルアプリケーションを試してみてください。

http://www.javaroad.jp/opensource/js_struts1.htm

実際にはhttp://localhost:8080/struts-examples-1.3.10/にアクセスしなければいけなかった。

さらに「参照ライブラリ」にstruts-core-1.3.10.jarを追加する必要があった。
追加の手順は、プロジェクト→プロパティ→Javaのビルドパス→(ライブラリー)外部JARの追加



というか、リンク先のがEclipseを使うやり方じゃないから。本当はEclipse専用の設定があるっぽい。

*1:Strutsは1.x系列と2.x系列があるが、2.x系列はもともとStrutsではないものにStrutsと名付けたので中身は別物らしい