2016-04-07 11 views
3

私が見つけた同様のケースではすべての解決策を試しましたが、運がありません。Struts2があらかじめ選択されたチェックボックスリスト

私のjsp。

<s:checkboxlist list = "positionsMap" 
      listKey = "%{key.toString()}" 
      listValue = "%{value}" 
       name = "selectedPositions" 
       value = "positionName" 
       label = "Position" /> 
positionsMap

キーpositionIdpositionNameとハッシュマップです。

selectedPositionsは、事前チェック済みの位置でいっぱいのリストです。デバッガでテストされ、データベースから正しい値が取得されます。 positionsは、IDと名前のリストです。 私の質問は、selectedPositionsに格納されているチェックボックスを事前チェックして表示する方法です。 私が持っている結果はすべて選択されていないチェックボックスです。 何かが明確でない場合は、私に尋ねてください。 ありがとうございます!アクションから

詳細:

private Object1 object= new Object1(); 
private List<Position> positionList = new ArrayList<>(); 
private List<Position> selectedPositions = new ArrayList<Position>(); 
private String positionName = new String(); 
private Map<Long,String> positionsMap = new HashMap<Long, String>(); 

//getters, setters 

@Inject 
transient ObjectDAO objectDAO; 
@Inject 
transient PositionDAO positionDAO; 

public String edit() { 
    HttpServletRequest request = (HttpServletRequest) ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST);  
    object= objectDAO.listById(Long.parseLong(request.getParameter("id"))); 
    positionList = positionDAO.listPositions(); 
    selectedPositions = object.getPositions(); 
    for (int i = 0; i < positionList.size(); i++) { 
     Position row = (Position) positionList.get(i); 
     Long id = row.getPositionId(); 
     positionName = row.getPositionName(); 
     positionsMap.put(id, positionName);   
    }  
    return SUCCESS; 
} 

答えて

4

は、コードを見て、私は戦略を変更したい:List<Position>からList<Long>を作成するために、OGNLの一覧プロジェクション機能を使用して、キーを正しく設定します。

<s:checkboxlist list = "positionsMap" 
       name = "selectedPositions" 
       value = "selectedPositions.{positionId}" 
       label = "Position" /> 
+0

これはアンドレアです!ありがとうございました。私は数日間試していましたが、似たようなトピックの他のすべての回答はうまくいきませんでした... – manu

+0

チェックした値をサブミットしてDBに保存したいのですが?私の最初の例では、私は事前チェックされた値を持っていませんでしたが、私は彼らが投稿され、DBに保存された位置を確認していました。あなたの例の後で、私はポジションを事前にチェックしています(これは達成したいものでしたが、Andreaは私の質問に答えましたが、投稿をクリックするとうまくいきません)。アイデアがあれば教えてください。ありがとう! – manu

+1

奇妙なのは、アクションに送り返すときに重要なのは 'name'(宛先リストをターゲットにする)と' listKey'(宛先リストに何を送るべきかを指定する)だけであり、両方とも変更されていないからです。 > –

関連する問題