ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

struts2コミュのStruts2に関する質問

  • mixiチェック
  • このエントリーをはてなブックマークに追加
本日からこちらのコミュに参加させて頂きました。
宜しくお願い致します。

今現在、Struts2で開発しておりまして、
開発している時に不明点が出た為に、こちらにトピックを
作成致しました。

早速で申し訳ありませんが質問させて頂きます。

(Struts2の質問とは微妙に違いますが)

Jspで
<s:select list="list" listKey="key" listValue=value">
とある場合に

listの値が選択されたときに動的に
表示している内容を変えたいと思っており、そこで躓いております。

JavaScriptでActionクラスに処理を投げるようにしたいと
思ってはいるのですが、なにぶんJavaScriptがあまり
得意ではない為、困っております。

JavaScriptのソースは下記になります。

function getContainerKey(){
var element = document.getElementById("registMeta.container_id");
document.forms["test"].action="MetaRegistAction!test";
ument.forms["test"].submit();
}
参考になるサイトを彷徨っていたら、forms["form_name"]とし、action="Action_name"と
すると書いてあったので記述しているのですが、一向に動く気配がありません。

jspのソースのjavascriptを適用している部分

<s:select name="name" list="list" listKey="key" listValue="value" onclick="getKey()"/>

firefoxのエラーコンソールには
下記のように表示されており
エラー: ument is not defined

ぐぐっても、英語のサイトばかりでわかりかねている状況です。

どなたかご指摘頂ければと思いますので
宜しくお願い致します。

コメント(11)

自己解決致しました。
単純な記述ミスでしたT_T
お世話になっております。
Struts2で、エラーが解決しない為、質問させて頂きます。

省略して書きますが、jspで下記のように記述したところ
<s:select name="xxx.workspace" list="workMap" />

2010/07/08 19:51:57:796 ERROR [org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/xxxx].[jsp]#invoke] - サーブレット jsp のServlet.service()が例外を投げました
tag 'select', field 'list', name 'xxx.workspace': The requested list key 'workMap' could not be resolved as a collection/array/map/enumeration/iterator type. Example: people or people.{name} - [unknown location]
at org.apache.struts2.components.Component.fieldError(Component.java:237)
at org.apache.struts2.components.Component.findValue(Component.java:358)
at org.apache.struts2.components.ListUIBean.evaluateExtraParams(ListUIBean.java:80)
at org.apache.struts2.components.Select.evaluateExtraParams(Select.java:105)
at org.apache.struts2.components.UIBean.evaluateParams(UIBean.java:856)
at org.apache.struts2.components.UIBean.end(UIBean.java:510)
at org.apache.struts2.views.jsp.ComponentTagSupport.doEndTag(ComponentTagSupport.java:42)
at org.apache.jsp.WEB_002dINF.jsp.container.containerRegist_jsp._jspx_meth_s_005fselect_005f1(containerRegist_jsp.java:683)
at org.apache.jsp.WEB_002dINF.jsp.container.containerRegist_jsp._jspx_meth_s_005fform_005f0(containerRegist_jsp.java:405)
at org.apache.jsp.WEB_002dINF.jsp.container.containerRegist_jsp._jspx_meth_tiles_005fputAttribute_005f1(containerRegist_jsp.java:277)
at org.apache.jsp.WEB_002dINF.jsp.container.containerRegist_jsp._jspx_meth_tiles_005finsertDefinition_005f0(containerRegist_jsp.java:176)
at org.apache.jsp.WEB_002dINF.jsp.container.containerRegist_jsp._jspx_meth_s_005fif_005f0(containerRegist_jsp.java:133)
at org.apache.jsp.WEB_002dINF.jsp.container.containerRegist_jsp._jspService(containerRegist_jsp.java:94)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:679)
at
・・・省略

下記のサイト参考にしましたが
http://issunsoftware.atso-net.jp/memo/java/struts2.1.jsp#A103
これ以外での対応方法

このエラーがどういう内容なのか教えて頂ければ幸いです。
以上、
宜しくお願い致します。
このURLの情報は、Struts2.1では静的メソッドは設定をしないと、デフォルトでは利用できなくなっている
ということを注意するように言っているものと思いますが、getWorkMap()は静的メソッドなのでしょうか?
# 2.0では静的メソッドは利用できた

このメソッドの返り値の型がコレクションでないというのがエラーの内容のようですが、この型が
何なのか、Actionのソースコードをお示しにならないと、どなたもお答えできないのではないでしょうか。
ぐっつぁんさん
ご返信ありがとうございます。

所々、省略しておりますがActionでのMapの部分を下記に記述させて頂きます。

public class
TreeMap<String, String> workMap;
String aaa = null;

this.workMap = new TreeMap<String,String>();
this.workMap.put(this.aaa,this.aaa);
this.workMap.put(this.bbb,this.bbb);
this.workMap.put(this.ccc,this.ccc);

public TreeMap<String, String> getWorkMap() {
this.log.trace("start");
this.log.trace("end");
return this.workMap;
}

上記のようになっております。

これを記述してからぐっつぁんさんの言ってる事を何度も
読み返してみて解決しました。
最初の宣言部分にnewしておらず、TreeMapを呼び出すメソッド内で
newしているのが原因だったようです。
Listで同じように記述していて問題がなかった為、Mapでも同じように
記述していたのが間違いだったようです。

ご指摘ありがとうございました。
再び質問させて頂きます。
昨日はありがとうございました。

<s:radio>のcheckedについて教えて頂ければと思います。

現在のradio部分のjspは
<s:radio name="aaa_bbb"list="array" value="<s:property/>"/>
と記述しております。

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=48216&forum=12
こちらの質問と同じだと思い、value値に値を入れても変わらず・・・。

Actionのarrayは以下のように定義しております。
ArrayList<String> array = new ArrayList<String>();

array.add("こんにちは");
array.add("こんばんわ");
array.add("おはよう");

public ArrayList<String> getArray(){
retrun this.array;
}

最初に表示されるラジオボタンにデフォルトでチェックをいれたいのですが
どのように記述すればいいのでしょうか。

ご指摘頂ければ幸いです。
宜しくお願い致します。
getAaa_bbb()が文字列"おはよう"を返すのではだめでしょうか?
Beanが何なのかよく分かりませんが、以下のようなことをしたいのではないでしょうか?


private String defaultFileName;
public ArrayList<String> getFileNameArray(){
//省略
 for(int j = 0;j < folderList.getLength();j++){
   Node folderFileNode = folderList.item(j);
   if ("FILE".equals(folderFileNode.getNodeName())){
    Element childElement = (Element)folderFileNode;
    this.fileNameArray.add(childElement.getFirstChild().getNodeValue());
   }
 }
if(this.fileNameArray.size() != 0){
  this.defaultFileName = this.fileNameArray.get(0);
 }
 return this.fileNameArray;
}
public String getFileName(){
  return defaultFileName;
}

JSP:
 <s:radio name="fileName" list="fileNameArray"/>

ぐっつぁんさん
ご返信ありがとうございます。

ご返信が遅くなってしまい申し訳ありません。
今回の件に関してましては、<s:radio>タグの中でname属性を先に指定
していたが為に、初期表示時にgetFileNameArrayで設定してある値が
取ってこれなかったようです。

ですのでラジオタグの中身を
<s:radio list="fileNameArray name="fileName" />
としたらうまくいきました。

ありがとうございました。


また違うご質問をさせて頂きます。
何度も何度も申し訳ありません。グーグル先生で調べても出てこなかったので
ご存じの方が居ましたら教えて頂ければ幸いです。

<s:select>タグ部分にvalidationを掛けたい場合は
どのようにしたらいいでしょうか。
<s:select>タグが何も選択されていなければ
requiredstringを使って、メッセージを表示したいと思ってます。

該当のソースは下記になります。

jsp
<s:select name="regist.id" list="list" listKey="key" listValue="value" />

Action
public void setUser(Bean bean)
{
this.log.trace("start");
this.regist = regist;
this.log.trace("end");
}

Bean
public void setId(int id)
{
this.id = id;
}
public int getId()
{
return this.id;
}

Action-validation.xml
<field name="regist.id">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message key="required.id"/>
</field-validator>
</field>

上記のようにした場合に
値がlistにある場合(list.size()!=0)の場合にも
必須チェックのエラーが出てしまって困ってます。

何かいい方法があればご教授頂ければ幸いです。
宜しくお願い致します。
連レス失礼いたします。

上の問題ですが解決致しました。

validation.xmlで

<field name="regist.id">
<field-validator type="int">
<param name="min">1</param>
<message key="required.id"/>
</field-validator>
</field>

としたら出来ました。
ありがとうございました。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

struts2 更新情報

struts2のメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング