◆Struts




ActionMessageはpropertiesファイルに書いてやろう

propertiesファイルをstruts-config.xmlで読み込んでいる状態で
new ActionMessage("エラーメッセージの文字列");
を書いても一向に文字が表示されない。
propertiesの中のコード"エラーメッセージの文字列"を
探しに行って、ないので表示されないらしい。
propertiesファイルがある場合は
new ActionMessage("error.code")

resources.properties
error.code=エラーメッセージの文字列
と書かないと、表示されないので注意!

前準備

これらのファイルをtomcatの中からコピってくる
WEB-INF/lib/***.jar
WEB-INF/tld/struts-bean.tld
WEB-INF/tld/struts-html.tld
WEB-INF/tld/struts-logic.tld
WEB-INF/tld/struts-nested.tld
WEB-INF/tld/struts-tiles.tld

  • web.xml
TLDのパスの設定をする。
<taglib-uri>struts-bean</taglib>
<taglib-location>tld/struts-bean.tld</taglib>

ここで設定したuriをhtmlの上でimportする。
<%@ taglib uri="struts-bean" prefix="bean" %>

一連のアクション

  • 用意するファイル
src/○○○Action
src/○○○Form
jsp/✕✕✕.jsp(遷移前の画面)
jsp/□□□.jsp(遷移後の画面)

  • ✕✕✕.jsp
<html:form action=△△△ ,,,

  • struts-config.xml
<!-- フォームの設定 -->
<form-bean name=○○○Form type=パッケージ.○○○Form />

<!-- アクションの設定 -->
<action path=△△△ type=パッケージ.○○○Action name=○○○Form >
<forward name=キーワード path=□□□.jsp >※次の画面

PreparedStatementの仕様

○
pre = createPrepared("SELECT * FROM ?")
pre.setString(1, "TBL_MEMBER")

✕
pre = createPrepared("SELECT * ?")
pre.setString(1, "FROM TBL_MEMBER")

※FROM句からとかWHERE句から設定などはできないようです。



JSPのエンコード指定しないとよく文字化けする


JSPファイル作成して他の人が更新する度に
エンコードがおかしくなると思ったら、
<%@page pageEncoding="UTF-8"%>
を指定しないと、いくらデフォルトがUTF-8でも
JSP作成時に毎回UTF-8にするように設定しても
勝手にShift_JISになったりするらしい。
ちょっとimportするだけでもエンコードはちゃんと書こう。


JSPからMapやListをFormに送信


FormのInstanceTypeの設定を削除すると、
jspからsubmitされた値のみFormに格納されるようになるが、
そういう場合のMapやListの受け渡し方法をメモ。

◆Map
jsp
<c:forEach var="data" items="${dataMap}" varStatus="status">
    <html:hidden property="dataMap(${${data.key}})" value="${data.value}" />
</c:forEach>

Form
Map<String, String> dataMap = new HashMap<String, String>();
Form→jspならkeyにInteger指定したり、オブジェクト入れたりできるが
jsp→Formだと、
JavaでdataMap.push(0, "");として
jspでproperty="dataMap(0)" value=""となってる値を送信すると、
Integer型のキー0とjspから送信されたString型のキー0が別のキーと認識され、
同じキーのデータが2件あるように見えてしまう。
なので、キーはStringじゃないとうまく行かない。

javascript
なんかうまく行かない。
var map = new Array();
map["あ"] = "お";
$.ajax({...
    data: "dataMap": map
...});
としてもエラーが出てしまう。
仕方がないので、
$.ajax({...
   data: "dataMap(あ)": map["あ"]
...});
とした。これだとMap使ってる意味が、、、

◆List
jsp
<c:forEach var="data" items="${dataList}" varStatus="status">
    <html:hidden property="dataList(${status.index})" value="${data}" />
</c:forEach>

Form
List<String> dataList = new ArrayList<String>();

javascript
var list = new Array("あ", "い", "う");
$.ajax({...
    data: dataList: list
...});
で送信できる。

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2013年02月28日 10:46