2016-04-07 17 views
3

Bulduğum benzer durumlarda tüm çözümleri denedim, ancak şanssız.Struts2 önceden seçilmiş onay kutusu listesi

Benim jsp.

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

positionsMap anahtar positionId ve değer positionName bir hashmap olup.

selectedPositions, önceden kontrol edilen konumlarla dolu bir listedir. Hata ayıklayıcı ile test edildi ve veritabanından doğru değer alındı. positions, kimlik ve ada sahip bir listedir. Bu yüzden sorum, selectedPositions'da depolanan onay kutularını nasıl önceden gösterebilirim? Sahip olduğum sonuçların tümü onaylanmamış onay kutularından oluşuyor. Bir şey açık değilse lütfen bana sorun. Şimdiden teşekkürler! eylemden

Fazla Bilgi:

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; 
} 

cevap

4

kodu Görülme ben stratejisini değiştirmek istiyorum: List<Position> bir List<Long> oluşturmak için OGNL en Liste Projeksiyon özelliği kullanmak ve daha sonra doğru anahtarını ayarlayın:

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

Bu Andrea! Çok teşekkürler, günler için çalışıyordum ve açıkçası benzer konularda diğer cevaplar işe yaramadı ... – manu

+0

Kontrol edilen değerleri göndermek ve DB'ye tekrar kaydetmek istermiyim? İlk örneğimde, önceden kontrol edilmiş değerlerim yoktu, ancak pozisyonları kontrol ettiğimde, onlar gönderildiler ve DB'ye kaydedildiler. Şimdi, örneğinizden sonra, pozisyonları kontrol ettim (bu benim elde etmek istediğim şeydi ve elbette Andrea sorumu cevapladın, ama ben göndermeye tıkladığımda işe yaramıyor). Herhangi bir fikriniz varsa lütfen paylaşın. Teşekkürler! – manu

+1

Garip, eyleme geri gönderirken önemli olan tek şey 'name' (hedef listeyi hedeflemek için) ve' listKey' (hedef listeye ne gönderileceğini belirlemek için) ve her ikisi de değiştirilmedi. İşi bozan yol boyunca ne yapmış olabileceğinizi dikkatli bir şekilde kontrol edin:> –