2015-07-10 63 views
2

我使用Struts2的2.3.24,并试图安装该OGNL调用构造函数OGNL无法调用构造

package ac.nz.unitec.struts2; 

public class User { 

private String username; 
private int age; 

public User(String username, int age){ 
    this.username = username; 
    this.age = age; 
} 

public User(int age){ 
    this.age = age; 
    System.out.println("user"); 
} 

public User(){} 

public String getUsername() { 
    return username; 
} 
public void setUsername(String username) { 
    this.username = username; 
} 
public int getAge() { 
    return age; 
} 
public void setAge(int age) { 
    this.age = age; 
} 

@Override 
public String toString() { 
    return "user " + age; 
} 
} 
在JSP

一个demo,我打电话User构造:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 
<%@ taglib uri="/struts-tags" prefix="s"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"  "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>OGNL</title> 
</head> 
<body> 
    zz 
    <s:property value="new ac.nz.unitec.struts2.User(28)"/><br> 
    zz 
    <s:debug/> 
</body> 
</html> 

但是,输出只显示zz和zz,我不知道它有什么问题。感谢您的任何建议

+0

不要忘记接受/ upvote帮助你的答案。这将有助于未来的游客也有类似的问题。 –

+0

嗨,Aleksandr,如何接受?我upvoted然后,但没有看到“接受”按钮.. @AleksandrM – user1888955

+0

阅读http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work。 –

回答

2

在最新版本的Struts2中,由于安全原因,不允许直接在JSP中创建对象。

在您的动作中创建一个方法,该方法创建一个新对象并从JSP调用它,或者您可以尝试使用<s:bean>标记。

查看更多about Internal security mechanism

+0

真的很赞赏这个解释:) – user1888955

+1

@ user1888955你没有赞赏它够了,否则你会提高和接受它;) –