Top > SAStrutsあれこれ > 1-4 複数の情報を一括登録しよう

Everything is expanded.Everything is shortened.
  1
  2
  3
  4
 
 
 
 
      <c:forEach var="changedModels" items="${models}">
        <html:text name="changedModels" property="name" indexed="true" />
        <html:text name="changedModels" property="value" indexed="true" /><br>
      </c:forEach>
Everything is expanded.Everything is shortened.
  1
  2
  3
  4
 
 
 
 
        <input type="text" name="changedModels[0].name" value="Name0">
        <input type="text" name="changedModels[0].value" value="Value0"><br>
        <input type="text" name="changedModels[1].name" value="Name1">
        <input type="text" name="changedModels[1].value" value="Value1"><br>

Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 
 
 
 
 
 
 
 
 
 
 
<html:html locale="true">
  <body>
    <h1>1-4のサンプル 複数対応の例</h1>
    <html:errors/>
    繰り返す回数を入力して下さい。<br>(正の整数 入力値チェックは1-5以降を参照して下さい。)
    <s:form>
      繰り返し回数<html:text property="count"/>
      <html:submit property="show" value="データ生成"/>
    </s:form>
  </body>
</html:html>
Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 
 
 
 
 
 
 
 
 
 
 
 
-
|
|
|
|
|
|
|
|
|
|
-
|
!
!
package sample.form;
 
import java.io.Serializable;
import java.util.List;
import org.seasar.framework.container.annotation.tiger.Component;
import org.seasar.framework.container.annotation.tiger.InstanceType;
import org.seasar.struts.annotation.IntRange;
import org.seasar.struts.annotation.IntegerType;
import org.seasar.struts.annotation.Required;
import sample.dto.DataModelDto;
 
@Component(instance = InstanceType.SESSION)
public class PluralForm implements Serializable {
    
    @Required
    @IntegerType
    @IntRange(min = 0, max = 1000)
    public String count;
    
    //表の初期データ格納用
    public List<DataModelDto> models;
 
    //行数の初期表示は"5"
    public void initialize() {
        count = "5";
    }
}

Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 
 
 
 
 
 
 
 
 
 
-
|
|
|
|
|
|
|
-
|
|
|
|
|
!
|
|
|
-
|
|
|
|
|
|
-
|
|
|
|
!
|
|
|
|
|
!
!
package sample.action;
 
import java.util.ArrayList;
import java.util.List;
import org.seasar.struts.annotation.Execute;
import javax.annotation.Resource;
import org.seasar.struts.annotation.ActionForm;
import sample.dto.DataModelDto;
import sample.form.PluralForm;
 
public class PluralAction {
    
    @ActionForm
    @Resource
    protected PluralForm pluralForm;
 
    //初期の行数入力画面表示用アクションメソッド
    @Execute(validator = false)
    public String index() {
        
        // 1) 行数入力テキストボックスの初期値"5"を設定します。
        pluralForm.initialize();
        
        return "count.jsp";
    }
    
    //データ編集画面表示用アクションメソッド
    @Execute(input="count.jsp")
    public String show() {
        
        //Formから行数を取得します。
        int count = Integer.parseInt(pluralForm.count);
        
        //行数分のデータを生成します。
        List<DataModelDto> models = new ArrayList<DataModelDto>();
        for( int i=0; i<count; i++ ) {
            DataModelDto d = new DataModelDto();
            d.name = "Name" + i;
            d.value = "Value" + i;
            models.add(d);
        }
        
        //後で比較するためにセッションへ格納する。
        pluralForm.models = models;
        
        return "show.jsp";
    }
}

Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
 
 
-
|
|
|
|
!
package sample.dto;
    
public class DataModelDto {
    
    //データを表す
    public String name;
    public String value;
}

Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 
 
 
 
 
 
 
 
 
 
 
 
<html:html locale="true">
  <body>
    <h1>1-4のサンプル 複数対応の例</h1>
    <s:form action="/pluralChange">
      <c:forEach var="changedModels" items="${models}">
        <html:text name="changedModels" property="name" indexed="true" />
        <html:text name="changedModels" property="value" indexed="true" /><br>
      </c:forEach>
      <html:submit property="change" value="変更"/>
    </s:form>
  </body>
</html:html>
Everything is expanded.Everything is shortened.
  1
  2
 
 
    //表の初期データ格納用
    public List<DataModelDto> models;

Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 
 
 
 
 
 
 
 
 
 
 
 
 
-
|
|
|
|
|
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
-
|
|
|
|
-
|
!
|
!
|
|
|
!
!
 
package sample.action;
 
import java.util.ArrayList;
import java.util.List;
import org.seasar.framework.aop.annotation.RemoveSession;
import org.seasar.struts.annotation.Execute;
import javax.annotation.Resource;
import org.seasar.struts.annotation.ActionForm;
import sample.dto.DataModelDto;
import sample.dto.DataModelHelperDto;
import sample.form.PluralChangeForm;
import sample.form.PluralForm;
 
public class PluralChangeAction {
    
    @ActionForm
    @Resource
    protected PluralChangeForm pluralChangeForm;
    
    //セッションからインジェクションされます。
    //初期データが格納されています。
    @Resource
    protected PluralForm pluralForm;
 
    //「変更」ボタンクリック時のアクションメソッド
    @Execute(validator = false)
    @RemoveSession(name="pluralForm") //セッションのpluralFormは本メソッド終了時に削除します。
    public String change() {
 
        List<DataModelHelperDto> displayModels = new ArrayList<DataModelHelperDto>();
        List<DataModelDto> initModels = pluralForm.models;
 
        List<DataModelDto> changedModels = pluralChangeForm.changedModels;
        
        //初期データと変更後データを比較して、変更があった行はisChangeをtrueにする。
        for( int i=0; i<initModels.size(); i++ ) {
            DataModelHelperDto d = new DataModelHelperDto();
            d.dataModelDto = changedModels.get(i);
            
            if(  !initModels.get(i).name.equals(changedModels.get(i).name) 
              || !initModels.get(i).value.equals(changedModels.get(i).value) ) {
                d.isChange = true;
            }
            displayModels.add(d);
        }
        pluralChangeForm.displayModels = displayModels;
 
        return "result.jsp";
    }
}
Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 
 
-
|
|
|
|
|
|
!
package sample.dto;
    
public class DataModelHelperDto {
    
    //データを表す
    public DataModelDto dataModelDto;
    
    //変更されたかフラグ
    public boolean isChange;
}
** 1-4-15 修正した結果を表示する画面  

Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
<html:html locale="true">
  <body>
    <h1>1-4のサンプル 複数対応の例</h1>
    <h3>変更内容の表示</h3>
    データ番号の色が赤いデータが変更されています。
    <table border="1">
      <tr>
        <th>データ番号</th>
        <th>Name</th>
        <th>Value</th>
      </tr>
      <c:forEach var="m" items="${displayModels}" varStatus="s">
      <tr>
        <td>
          <c:choose>
          <c:when test="${m.isChange  * true}"><font color="#ff0000">${s.index}</font></c:when>
          <c:when test="${m.isChange  * false}">${s.index}</c:when>
          </c:choose>
        </td>
        <td>${f:h(m.dataModelDto.name)}</td>
        <td>${f:h(m.dataModelDto.value)}</td>
      </tr>
      </c:forEach>
    </table>
  </body>
</html:html>

添付ファイル: filesupersample1-4_7.jpg 705件 [詳細] filesupersample1-4_6.jpg 649件 [詳細] filesupersample1-4_5.jpg 545件 [詳細] filesupersample1-4_4.jpg 689件 [詳細] filesupersample1-4_2.jpg 634件 [詳細] filesupersample1-4_3.jpg 669件 [詳細] filesupersample1-4_1.jpg 637件 [詳細]

リロード   新規 編集 凍結解除 差分 添付 複製 名前変更   ホーム 一覧 単語検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS
Last-modified: 2012-08-08 (水) 23:25:51 (2921d)