在 Struts 2 中使用 ModelDriven 为空值获取 null

问题描述 投票:0回答:3
对于具有空值的

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
参数传递空值,但在实际操作中我得到了
null
值。

如何获取

ModelDriven
中的精确值?

java struts2 url-parameters ognl model-driven
3个回答
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} 表达式或 Struts 显示标签,
null
值将仅呈现为空白。

但是,如果您有一些依赖于它的代码(例如

?chrome
告诉浏览器类型),您最好更改它(更改为
?browser=ff
之类的内容),因为使您的 Actions
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
投票

我认为你得到空值是因为

您正在实现

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 )
    }

希望有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.