【问题标题】:Struts 2 + Java Bean not retaining valuesStruts 2 + Java Bean不保留值
【发布时间】:2017-10-12 15:24:37
【问题描述】:

首先,我使用的是 Struts 2 和 Java。我正在尝试让我的 LoginUser Action 类将信息传递给 UserBean Java Bean。

LoginUser Action 执行时,fullName 的 bean 值通过<s:property> 标签从userBean 调用来显示。

但是当我点击success.jsp中的More Info链接时,下面的页面也会通过<s:property>标签调用bean值fullName,但这次是null,如果我返回success.jsp 也是null

我的问题:

为什么 bean 没有按预期保留信息?

技术说明:我正在使用 Eclipse IDE 作为 Maven 项目进行开发,并且只有 Apache Tomcat 7 可用于测试/部署。

来自 JAVA 和 JSP 文件的代码:

LoginUser行动:

package test.Home1;

@SuppressWarnings("unused")
public class LoginUser {

    private String username = "";
    private String password = "";
    private String userOK = "admin";
    private String passOK = "admin";
    
//  Password getters/setters    
    public String getUsername() {
        return username;
    }
    
    public String getPassword() {
        return password;
    }
//  Username getters/setters
    public void setUsername(String username) {
        this.username = username;
    }
     
    public void setPassword(String password) {
        this.password = password;
    }
//  Bean is instantiated here
    private UserBean userBean = new UserBean();
    
//  userBean getters/setters    
    public void setUserBean(UserBean userBean) {
    this.userBean = userBean;
    }
    public UserBean getUserBean() {
        return userBean;
}
    
//  Execute the following action when this class is called via struts action
    public String execute() {
        
        if (this.username.equalsIgnoreCase(userOK) && this.password.equals(passOK)) {
            
            userBean.setAccessLevel("full");
            userBean.setFullName("Administrator");
            userBean.setUserName(username);
            
        return "SUCCESS";

    }
        else {
            return "FAIL";
        }
        }
}

UserBeanBEAN:

package Test.Home1;
    
public class UserBean {

    private String userName;
    private String password;
    private String fullName;
    private String accessLevel;
    private boolean LoggedIn = false;
    
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String getFullName() {
        return fullName;
    }
    public void setFullName(String fullName) {
        this.fullName = fullName;
    }
    public String getAccessLevel() {
        return accessLevel;
    }
    public void setAccessLevel(String accessLevel) {
        this.accessLevel = accessLevel;
    }
    public boolean isLoggedIn() {
        return LoggedIn;
    }
    public void setLoggedIn(boolean loggedIn) {
        LoggedIn = loggedIn;
    }
    
}

login.jspJSP表单登录页面:

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>
Hello World at Home (Struts 2 Tutorial)
</title>
</head>
<body style="font-family: Arial;">
<h1>Please Log in</h1>

<s:form action="LoginUser" autocomplete="off">
    <s:textfield name="username" label="Username"/>
    <s:password name="password" label="Password"/>
    
    <s:submit/>
</s:form>

</body>
</html>

success.jspJSP登录成功页面:

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>
Hello World at Home (Struts 2 Tutorial) - LOGGED IN
</title>
</head>
<body style="font-family: Arial;">
<h1>Struts 2 Hello World Example</h1>
<h4>Hello <s:property value="userBean.fullName" />
</h4>
<br><br>
<s:a value="Info">More Info</s:a>
</body>
</html>

moreInfo.jspJSP 文件:

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>
Hello World at Home (Struts 2 Tutorial) - LOGGED IN
</title>
</head>
<body style="font-family: Arial;">
<h1>Are you still there <s:property value="userBean.fullName" />?</h1>

<h4>Can you still see your name above?</h4>
<br><br>
<s:a value="Home">Home</s:a>

</body>
</html>

【问题讨论】:

    标签: jsp null struts2 javabeans ognl


    【解决方案1】:

    Action bean 仅在同一个请求期间有效,但如果您按下链接,它会调用另一个请求,其中 创建了 userBean。当您提交表单时,如果它是 null,则 Struts 会填充 bean。

    OGNL 在尝试从包含参数名称的表达式填充 bean 时的默认行为是 createIfNull==true。由于您没有提供任何带有 bean 名称的参数,因此不会填充任何内容。

    如果你在这段代码中添加一些参数

    <s:a action="ShowUser"><s:param name="userBean.fullName" value="Administrator"/> More Info</s:a>
    

    然后它将创建一个userBean 并使用参数值初始化其属性fullName。动作名称应该不同,它应该映射到另一个方法而不是execute(),如果在动作配置中没有指定方法属性,则默认使用execute()

    参考资料:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多