2012-06-11 5 views
0

Dans mon scénario, je développe imbriqué select sur une page JSP, binded à un haricot:Spring 3 emboîtées mvc: sélectionnez

Bean

public class WizardPanelp1Bean { 

private Integer id; 
private Stringofpanels stringofpanels; 
private Paneltype paneltype; 
private Integer number; 
private String paneltypestring; 
//and getters/setters... [Omitted] 

Maintenant, j'ai l'objet Paneltype, un autre bean simple,

de Paneltype

private Integer id; 
private double peakpower; 
private double weight; 
private String name; 
private double dimension; 
private double conversion; 
private Set functions = new HashSet(0); 
private Set sensors = new HashSet(0); 
private Set panels = new HashSet(0); 
//[Getters/setters omitted as usual] 

Alors, je prépare la vue, avec un haricot nommé wb simple arraylist de panneaux

public class PanelsBean { 
    private ArrayList<WizardPanelp1Bean> panels =new ArrayList<WizardPanelp1Bean>(); 

et enfin je vais au jsp (s'il vous plaît noter que ceci est en a)

<tbody> 
     <c:forEach items="${wb.panels}" varStatus="loop" var="item"> 
      <tr> 
       <td>${item.id}</td> 
       <td> 
        <form:select path="panels[${loop.index}].paneltype" > 
         <c:forEach var="type" items="${types}"> 
          <c:choose> 
           <c:when test="${item.paneltype.id==type.id}"> 
            <form:option selected="selected" value="${type.id}" label="${type.name}" /> 
           </c:when> 
           <c:otherwise> 
            <form:option value="${type.id}" label="${type.name}" /> 
           </c:otherwise> 
          </c:choose> 
         </c:forEach> 
        </form:select> 
       </td> 
        <td><form:input style="width:180px" path="panels[${loop.index}].number" /></td> 
        <td> 
        <div> 
         <form:input style="visibility: hidden ; width:0px" path="panels[${loop.index}].id" disabled="disabled" /> 
         <a href="javascript:remove(${item.id},${stringofpanels.id})" class="wb.panels.remove" >Rimuovi</a> 
        </div> 
        </td> 
       </tr> 
      </c:forEach>  
    </tbody> 

chaque fois que j'obtiens une référence nulle à paneltype. J'ai évidemment utilisé un @InitBinder sur le contrôleur: initBinder

@InitBinder 
    protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception { 
      binder.registerCustomEditor(Paneltype.class, "paneltype", new PropertyEditorSupport() { 
       @Override 
       public void setAsText(String text) { 
        int i=0; 
        PaneltypeDAO pDAO=new PaneltypeDAO(); 
        setValue(pDAO.findById(Integer.parseInt(text))); 
       } 
      }); 
     } 

mais le code n'atteins jamais cela. C'est comme si jsp était sûr que la valeur est null.

Suggestions? Merci

+0

Je pense que j'ai raté le nom = "" après mais maintenant je ne peux pas lier le résultat – Gtazok

Répondre

0

Je pense que votre problème persiste lorsque vous essayez de soumettre ce formulaire et ne pas obtenir les valeurs liées dans le modèle. Essayez d'initialiser votre liste en utilisant LazyList. Essayez d'initialiser votre liste en utilisant LazyList. Veuillez remplacer votre déclaration de panneaux dans la classe PanelsBean comme ci-dessous.

private List<WizardPanelp1Bean> panels = LazyList.decorate(new ArrayList<WizardPanelp1Bean>(),FactoryUtils.instantiateFactory(WizardPanelp1Bean.class)); 

Espérons que cela vous aide. À votre santé.