2012-01-07 2 views
0

logic:iterateを使用してコレクションを繰り返し処理するjspページがあり、各アイテムにhtml:formが表示されます。 これは動作しますが、これらのフォームの1つを送信するたびにページがリロードされるたびに、残りのフォームはすべて最後に挿入された値で埋められます。 おそらく何かがセッションに残っていて、フォームがすべて同じタイプなので、それらはすべてあらかじめ用意されています。Struts - <logic:iterate>内に<html:form>を提出します

これは私のjspである:

<%@ page language="java"%> 
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%> 
<%@taglib uri="http://struts.apache.org/tags-logic" prefix="logic"%> 
<%@taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%> 
<html> 
<body> 
    <html:img action="/viewMedia.do?method=viewImageThumb" paramId="idImage" 
     paramName="image" paramProperty="idImage" /> 
    <logic:iterate name="regions" id="region"> 
     <p> 
      <html:img action="/viewMedia.do?method=viewRegion"  paramId="idRegion" paramName="region" paramProperty="idRegion" /> 
      <logic:notPresent name="region" property="person"> 
       <html:form action="/AssignRegion.do" > 
        <html:text property="name" /> 
        <html:text property="surname" /> 
        <html:checkbox property="usedForTraining" /> 
        <html:hidden property="idRegion" name="region" /> 
        <html:hidden property="idImage" name="region"/> 
        <html:submit /> 
        <html:cancel /> 
       </html:form> 
      </logic:notPresent> 
      <logic:present name="region" property="person"> 
       <bean:write name="region" property="person.name"/> 
       <bean:write name="region" property="person.surname"/> 
      </logic:present> 
     </p> 
    </logic:iterate> 
</body> 
</html> 

私はこの問題を回避するにはどうすればよいですか?

答えて

0

logicとhtml taglibを使用しているとき、入力フィールドのname属性に正しく接頭辞が付いていないようです。あなたが生成されたHTMLを表示した場合nested taglib代わり

<%@taglib uri="http://struts.apache.org/tags-nested" prefix="nested"%> 
... 
<nested:iterate ... 
... 
    <nested:form ... 
     <nested:text .. 

を使用してみてください、あなたは、一般的に、私は常にロジックとhtmlタグライブラリの代替として、ネストされたタグライブラリを使用することをお勧めします<input name="regions[0].name" ...むしろ

<input name="name" ...よりも表示されます。

0

logic:iterateの問題のようには見えません。問題の説明を見ると、すべてのマッピングに同じフォームBeanを使用しているようです。

struts-config.xmlをチェックして、アクションマッピングで使用されるフォームBeanのスコープが「セッション」であるかどうかを確認します。

「セッション」の場合は、転送先の他のページに事前入力する必要のないフォームBeanのプロパティをリセットする必要があります。

フォームBeanの特定のプロパティがリセットされない場合、フォームBeanが「セッション」に保持されるため、プロパティのセッションキャッシュ値が結果ページで使用されます。

関連する問題