2017-09-20 4 views
0

Je suis à l'aide des entretoises 2 et je l'ai mis en place mon code comme ceci:Struts2 liste ne peut pas être résolue pour une vue

classe Action:

public class OrderDetailAction extends BaseActionSupport { 

    private Collection<ShippingAddress> shippingAddressList; 

    <the getters and setters here> 

    private Collection<ShippingAddress> billingAddressList; 

    <the getters and setters here> 


    public String displayCreate() { 
     LOGGER.info("DISPLAY CREATE CALLED"); 
     populateForiegnFields(); 
     LOGGER.info("populate foreign fields done calling"); 
     return SUCCESS; 
    } 


    private void populateForiegnFields(){ 

     LOGGER.info("ENTERED POPULATE FOREIGN FIELDS"); 

     ShippingAddressService shippingAddressService = ServiceFactory.getInstance().getShippingAddressService(); 
     shippingAddressList = shippingAddressService.getShippingAddresss(); 
     if(shippingAddressList == null) { 
      LOGGER.info("shipping address list IS NULL"); 
     } else { 
      LOGGER.info("shipping address list IS NOT NULL. CONTENTS:"); 

     } 
     getSession().put("shippingAddressList", shippingAddressList); 

     billingAddressList = shippingAddressService.getShippingAddresss(); 

     if(billingAddressList == null) { 
      LOGGER.info("billingAddressList IS NULL"); 
     } else { 
      LOGGER.info("billingAddressList IS NOT NULL. CONTENTS:"); 

     } 
     getSession().put("billingAddressList", billingAddressList); 

    } 

Et l'extrait de mon Créer une commande Détail JSP est:

<s:form> 
       <div class="form-group">some other fields</div> 

       <div class="form-group"> 
        <s:select label="SHIPPINGADDRESSID" list="shippingAddressList" listKey="ID" listValue="ID" name="shippingAddress" ></s:select> 
       </div> 

       <div class="form-group"> 
        <s:select label="BILLINGADDRESSID" list="billingAddressList" listKey="ID" listValue="ID" name="billingAddress" ></s:select> 
       </div> 
       <input class="btn btn-success" type="submit" name="action:createOrderDetail" value="submit" id="displayCreateOrderDetail_createOrderDetail"/> 
      <input class="btn btn-default" type="submit" name="action:getOrderDetails" value="cancel" id="displayOrderDetail_getOrderDetails" /> 
    </s:form> 

L'erreur que je reçois est la suivante:

tag 'select', champ 'liste', nom 'shippingAddress': La liste non demandée clé 'shippingAddressList' pourrait être résolu en tant que collection /tableau/carte/Enumeration/type iterator

Mais ce qui embrouille moi, surtout après avoir regardé cette erreur sur d'autres articles personnes ont suggéré que le shippingAddressList peut ne jamais avoir été instancié mais quand j'ai vérifié les fichiers journaux que j'ai écrit ci-dessus, il n'était pas nul et à un moment, j'ai également enregistré les valeurs de shippingAddressList.

Y at-il d'autres raisons pour lesquelles je pourrais avoir cette erreur?

Merci d'avance.

+0

Est-ce que le résultat jsp de 'OrderDetailAction'? Avez-vous 'public Collection getShippingAddressList()' dessus? –

+0

Je ne suis pas sûr de ce que vous voulez dire par le résultat de 'orderDetailAction' mais oui, shippingAddressList a des getters et setters publics bien. Lorsque j'ai vérifié les fichiers journaux, lorsque la page JSP était chargée, elle appelait des méthodes à l'intérieur de 'orderDetailAction'. – aBrokenSniper

+0

Je voulais dire que si jsp a été défini comme le résultat de l'action ci-dessus dans 'struts.xml'. –

Répondre

0

Supprimez d'abord la collection et utilisez plutôt la liste. Je ne sais pas pourquoi vous mettez ces deux listes sur la session. Ils seront déjà sur la pile de valeur. Je crois que votre classe ShippingAddress a ID propriété.

0

Oh mon gars, voici l'erreur que je faisais. Pour que les gens ne vont pas dans ce casse-tête:

mes accesseurs pour mon shippingAddressList et mon billingAddressList sont les suivantes:

get**s**hippingAddressList(); set**s**hippingAddressList() 

et

get**b**illingAddressList(); set**b**illingAddressList() 

La question ici est que le boîtier n'était pas correct. Parce que ce n'était pas un bon chameau, les entretoises ne pouvaient jamais appeler les getters et les setters.