2013-08-08 1 views
1

ModelDriven renvoie NULL pour le params qui ont des valeurs vides.L'obtention de valeurs NULL pour les valeurs vides dans ModelDriven

Bean

public class MyBean 
{ 
    private String userName; 
    public void setUserName(String userName) 
    { 
     this.userName = userName; 
    } 
    public String getUserName() 
    { 
     return userName; 
    } 
} 

Classe

public class MyAction extends ActionSupport implements ModelDriven<MyBean> 
{ 
    MyBean myBean = new MyBean(); 
    public String execute() 
    { 
     System.out.println(myBean.getUserName());//getting null here 
     return "SUCCESS"; 
    } 
} 

Demande

/home/MyAction.do?USERNAME =Écoute je passe la valeur vide pour userName param mais dans l'action j'obtiens la valeur null.

Comment obtenir la valeur exacte en ModelDriven?

+1

ce ne sont pas des valeurs vides, les valeurs vides doivent être 'userName =" "& pass =" "' –

+0

@UmeshAwasthi Lors de l'utilisation de 'request.getParameter (" userName ")' il retournera la valeur correcte (valeur vide). – john

+0

Ne créez pas d'instance de bean par vous-même en action. Enlevez '= new MyBean()'. –

Répondre

0

Lorsque votre propriété de bean contient une valeur null, elle conserve la valeur dans les expressions OGNL et la balise value. Vous pouvez toujours utiliser l'expression OGNL pour évaluer la valeur null. Par exemple

<s:if test="userName == null"> 
    <s:property value="username"/> 
</s:if> 

Si vous voulez passer null valeur en tant que paramètre, vous devez utiliser la chaîne null.

/home/MyAction.do?userName="null"&pass="null" 
0

Bien que, HttpServletRequest#getParameter() traite différemment les deux cas; pour la plupart des objectifs pratiques, cela ne devrait pas avoir beaucoup d'importance. En effet, si vous utilisez des expressions $ {EL} ou des balises d'affichage Struts, les valeurs null sont affichées en tant que blancs uniquement.

Si, cependant, vous avez un code qui en dépend (comme ?chrome dire le type de navigateur) vous êtes mieux changer (à quelque chose comme ?browser=ff) parce que faire vos ActionsServletRequestAware est pas la peine.

Si vous souhaitez tout de même y aller, voici comment faire:

public class MyAction extends ActionSupport implements ModelDriven<MyBean>, 
                 ServletRequestAware 
{ 
    HttpServletRequest request; 
    MyBean myBean = new MyBean(); 

    public String execute() 
    { 
     if (myBean.getUserName() == null) { 
      myBean.setUserName(getRequest().getParameter("userName")); 
     } 

     System.out.println(myBean.getUserName()); 
     return "SUCCESS"; 
    } 

    public void setServletRequest(HttpServletRequest request) 
    { 
     this.request = request; 
    } 
} 
0

Je pense que vous obtenez des valeurs nulles beacuse de

Vous implémentant l'interface ModelDriven<MyBean>.

et cette interface, il faut remplacer la méthode getModel(), vérifier quelle méthode getModel() est returning.whether il retourne null ou votre variable de haricot (monBean) ..

public MyBean getModel() { 
return null; // This must be the reason, you will get null always when you call getProperties of bean 
} 

Essayez comme cette

public MyBean getModel() { 
    return myBean ; // This will return your bean in modelDriven Interface(return your bean variable here) 
    } 

J'espère que ça aide.

Questions connexes