在ModelDriven中为空值获取NULL

时间:2013-08-08 15:48:53

标签: java struts2 url-parameters ognl model-driven

ModelDriven会为NULL返回params,其中包含空值。

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中获得准确的值?

3 个答案:

答案 0 :(得分: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"

答案 1 :(得分:0)

虽然HttpServletRequest#getParameter()处理这两种情况的方式不同;对于大多数实际目的而言,这应该不重要。这是因为使用 $ {EL} 表达式或 Struts 显示标记,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;
    }
}

答案 2 :(得分:0)

我认为你的空值是

您正在实施ModelDriven<MyBean>界面。

并且此接口必须覆盖getModel()方法,检查返回的getModel()方法。无论是返回null还是bean(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 )
    }

希望它有所帮助。