2016-04-07 54 views
3

我已經嘗試了所有類似案例中的解決方案,但我沒有發現。Struts2預選複選框

My jsp。

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

positionsMap是與關鍵positionId和值positionName一個HashMap中。

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

看代碼,我改變策略:使用OGNL的名單投影功能來創建從List<Position>一個List<Long>,然後正確地設置鍵:

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

這就是安德烈!非常感謝,我試了幾天,很明顯,類似主題中的所有其他答案都不起作用... – manu

+0

如果我想提交選中的值並將它們保存到數據庫中,那麼該怎麼辦?以我最初的例子,我沒有預先檢查的值,但是當我檢查他們提交併保存到DB的職位時。現在,在你的例子之後,我已經預先檢查了職位(這是我想要實現的,當然Andrea你回答了我的問題,但是當我點擊提交時,它不起作用)。如果您有任何想法,請分享。謝謝! – manu

+1

奇怪的是,因爲唯一重要的事情是發回行動的是'name'(目標列表)和'listKey'(指定發送到目的地列表的內容),並且兩者都沒有改變。仔細檢查你可能已經做了什麼打破了事情:> –