在跑struts2的時候有時候會出現上面的錯,特別是新手,
這種情況是在struts2進階的POJO訪問時候出現的s
警告: Error setting expression 'user.password' with value '[Ljava.lang.String;@1cb2dd1'
ognl.OgnlException: target is null for setProperty(null, "password", [Ljava.lang.String;@1cb2dd1)
at ognl.OgnlRuntime.setProperty(OgnlRuntime.java:2219)
跟上面差不多的異常,我剛開始也遇到這個比較糾結的問題,下面我來說說我是如何解決的吧,可能大家遇到的跟我的不一樣。但是這中間有幾個地方需要注意,不然就會出現上面的錯。
1、前台jsp
<body><br /> <form action="<%= path%>/login.action" method="post"><br /> 使用者名稱:<input type = "text" name = "user.username"><br/><br /> 密 碼:<input type = "text" name = "user.password"><br/><br /> <input type = "submit" value = "login"><br /> </form><br /> </body>
注意兩個地方,一個是input裡面的name要寫成**.XX;這裡的**就是你後面action中的一個類對象,小寫就OK,我這裡是一個user,還有就是這裡是name=不是id=,如果是用id的話,好像是傳不到action中去的。
2、action類
public class Login extends ActionSupport {<br />public User getUser() {<br />return user;<br />}</p><p>public void setUser(User user) {<br />this.user = user;<br />}</p><p>private User user = new User();</p><p>@Override<br />public String execute() throws Exception {<br />System.out.println("username="+user.getUsername()+",password="+user.getPassword());<br />return SUCCESS;<br />}</p><p>}
user類
public class User {<br />private String username;<br />private String password;<br />public String getUsername() {<br />return username;<br />}<br />public void setUsername(String username) {<br />this.username = username;<br />}<br />public String getPassword() {<br />return password;<br />}<br />public void setPassword(String password) {<br />this.password = password;<br />}</p><p>}
action中的 user類必須得new,如果不new會報null 指標(除非你已經配好spring,讓spring給你做這件事)
再一個就是必須得有get/set方法,user的get/set方法。
struts.xm;
<package name="login" extends="struts-default"><br /><action name="login" class="com.ssh2.action.Login"><br /> <result name="success" type="redirect">/index.jsp</result><br /> <result name="error" type = "redirect">/login.jsp</result><br /> </action><br /></package>
注意上面幾點就沒問題了。