2013-08-08 2 views
1

ModelDriven возвращает NULL для params, которые имеют пустые значения.Получение NULL для пустых значений в ModelDriven

Бин

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

Класс

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

Запрос

/home/MyAction.do?UserName =&pass=

Слушаю, я передаю пустое значение для userName param, но в действии Я получаю значение null.

Как получить точное значение в ModelDriven?

+1

Это не пустые значения, пустые значения должны быть 'userName =" "& pass =" "' –

+0

@UmeshAwasthi При использовании 'request.getParameter (" userName ")' оно вернет правильное значение (пустое значение). – john

+0

Не создавайте экземпляр компонента в действии. Удалите '= new MyBean()'. –

ответ

0

Когда ваше свойство bean содержит значение null, оно сохраняет значение в выражениях OGNL и теге value. Вы всегда можете использовать выражение OGNL для оценки значения null. Например

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

Если вы хотите передать null значение в качестве параметра, то вы должны использовать null строку.

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

Хотя, HttpServletRequest#getParameter() обрабатывает два случая по-разному; для большинства практических целей это не имеет большого значения. Это связано с тем, что выражения $ {EL} или Столбцы, значения null будут отображаться только как пробелы.

Если, однако, у вас есть код, который зависит от него (как ?chrome говорит тип браузера) вы лучше меняющегося его (что-то вроде ?browser=ff), потому что делает ваши действия ServletRequestAware не стоит.

Если вы еще хотели бы пойти на это, вот как это сделать:

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

Я думаю, вы получаете нулевые значения из

beacuse

Вы реализуете ModelDriven<MyBean> интерфейс.

и этот интерфейс должен переопределить getModel() метод, проверьте, что getModel() метод returning.whether он возвращается нуль или ваш бобовый переменную (myBean) ..

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

Попробуйте, как это

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

Надеюсь, что это поможет.