[Seasar-user:3143] Re: [S2Struts] s2strutsタグsubmitのindexIdの使用方法を教えてください

Ichimaru ichimaru_s
2006年 2月 4日 (土) 04:01:11 JST


市丸と申します

お返事が遅れて申し訳ございません。
アドバイス有難うございます。

> 現状では、submitタグのindexId属性は、
> action属性と同時に利用することができません。
> indexId属性を利用する場合は、以下のようにpropertyを指定して利用します。
>  
> ===============================================================
> [JSP]
> <logic:iterate id="Test" name="indexList" indexId="index">
> <s2struts:submit property="arg" indexId="index" />
> </logic:iterate>
> ---------------------------------------------------------------
> [HTML]
> <input type="submit" name="arg[0]" value="Submit">
> <input type="submit" name="arg[1]" value="Submit">
> ==============================================================

なるほど。と思い、早速試してみたのですが、
別のエラーが発生してしまいました。

==============================================================
変更したjspです

<logic:iterate id="id" name="indexList" indexId="index">
  <s2struts:submit property="methodIndex" indexId="index"/>
</logic:iterate>
==============================================================
Action、Form(Dto)、Actionインターフェースに、
想定できるメソッドを用意しましたが解決できませんでした。

public String methodIndex(int index, Object value);
public String methodIndex(Object value);
public String methodIndex(int index);
void setMethodIndex(int index, Object value);
void setMethodIndex(Object value);
void setMethodIndex(int methodIndex);
int getMethodIndex();
int getMethodIndex(int index);
void setIndex(int index);
int getIndex();
void Submit();
==============================================================
エラーです

java.lang.IllegalArgumentException: Property 'methodIndex' has
no indexed write method
	org.apache.commons.beanutils.WrapDynaBean.set(WrapDynaBean.java:263)
	org.seasar.struts.interceptors.ProcessPojoFormInterceptor$SerializeBeanValidatorForm.set(ProcessPojoFormInterceptor.java:273)
	org.apache.commons.beanutils.PropertyUtilsBean.setIndexedProperty(PropertyUtilsBean.java:1361)
	org.apache.commons.beanutils.BeanUtilsBean.setProperty(BeanUtilsBean.java:1016)
	org.apache.commons.beanutils.BeanUtilsBean.populate(BeanUtilsBean.java:811)
	org.apache.commons.beanutils.BeanUtils.populate(BeanUtils.java:298)
	org.apache.struts.util.RequestUtils.populate(RequestUtils.java:493)
	org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:804)
	org.seasar.struts.processor.S2RequestProcessor.processPopulate(S2RequestProcessor.java:125)
	org.seasar.struts.processor.AcceptorImpl.process(AcceptorImpl.java:88)
	org.seasar.struts.processor.S2RequestProcessor.process(S2RequestProcessor.java:59)
	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.seasar.struts.filter.S2StrutsFilter.doFilter(S2StrutsFilter.java:45)
	org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:60)
	jp.ad.smartvalue.examples.om.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:173)
==============================================================

あと、下記のコードでも同じエラーが発生します。
<html:hidden property="methodIndex[0]" value="test"/>

単純なミスかもしれませんが、ご教授願います。


> この部分を読んでて思ったのですが、上記のように
> public String test(int index)
> でindexをわたしてメソッドを実行できるのも便利だなーと思いましたので、
> action属性とindexId属性を指定した場合、
> 上記形式のメソッドを呼び出す機能を追加しようと思います。

すごく便利になると思います。
どうか宜しくお願いいたします。






Seasar-user メーリングリストの案内