Unexpected Exception caught setting 'x' on class xx:Error setting expression 'xx' with value ['x',]

3670 단어 expressionXsetting
쓸데없는 말은 하지 않고 바로 본론으로 들어갑니다. SSH 프레임워크로 코드를 두드릴 때 이런 문제에 부딪혔습니다.
Unexpected Exception caught setting 'act' on 'classcn.itcast.shop.adminuser.action.AdminUserAction: 
Error setting expression 'act'with value ['signin', ]
사실 이틀을 뛰어넘어 이 문제를 해결한 후에 돌이켜 생각해 보면 사실은 매우 간단하다. 어째서 디버깅을 할 줄 모르는가!정말 미치겠네. 인터넷에 해결 방안이 있긴 한데, 전영이는 힘들게 봤는데, 보고 또 보고, 결국 해결됐어. 다음은 이 문제를 분석해 보자.
백엔드에서 창에 로그인한 jsp에서form표에는 세 개의 input 노드가 있습니다.
<span style="font-size:18px;"><form id="loginForm" action="${pageContext.request.contextPath }/adminUser_login.action"  method="post" target="_parent" onsubmit="return validate();">
		  <table cellspacing="0" cellpadding="0" style="margin-top: 100px" align="center">
		  <tr>
		    <td><img src="images/login.png" width="178" height="256" border="0" alt="SHOP" /></td>
		    <td style="padding-left: 50px">
		      <table>
		      <tr>
		        <td>     :</td>
		        <td><input type="text" name="username" /></td>
		      </tr>
		      <tr>
		        <td>     :</td>
		        <td><input type="password" name="password" /></td>
		      </tr>
		            
		      <tr>
		        <td> </td>
		        <td><input type="submit" value="      " class="button" /></td>
		      </tr>
		      </table>
		    </td>
		  </tr>
		  </table>
		     <input type="hidden" name="act" value="signin"  /> 
		</form></span>

그리고 로그인 단추를 누르면 이 세 노드를 포함하는form 폼을 제출하고 액션에서 모델 드라이브를 통해username과password 두 개의 매개 변수를 받아들인다. (성명: 모델 드라이브에 이 두 개의 매개 변수만 있음) 코드는 다음과 같다.
package cn.itcast.shop.adminuser.action;

import org.apache.struts2.ServletActionContext;
import cn.itcast.shop.adminuser.service.AdminUserService;
import cn.itcast.shop.adminuser.vo.AdminUser;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

public class AdminUserAction extends ActionSupport implements ModelDriven<AdminUser> {
	//      
	private AdminUser adminUser = new AdminUser();
	public AdminUser getModel(){
		return adminUser;
	}
	//  adminUserService
	private AdminUserService adminUserService;
	public void setAdminUserService(AdminUserService adminUserService) {
		this.adminUserService = adminUserService;
	}

	/**
	 *        
	 * */
	public String login(){
		//  service    
	 AdminUser curAdminUser =adminUserService.login(adminUser);
	 if(curAdminUser == null) {
		 //    
		 this.addActionError(" ,          !");
		 return "loginFail"; 
	 }else{
		 //    
		 //   session 
		 ServletActionContext.getRequest().getSession().setAttribute("existAdminUser", curAdminUser);
		 return "loginSuccess";
	 }
  }
	
}

이어서 이 오류를 보고합니다. (전제: 이 오류는 로그인에 영향을 주지 않습니다. 로그인은 두 개의 인자만 필요하기 때문입니다:username과password,)
물론'act'와'signin'두 파라미터를 잘못 찾았는데, 이 글을 통해http://stackoverflow.com/questions/21018018/unexpected-exception-caught-setting-xxx-on-class-xxx-error-setting-expressio, 이유를 간단히 알았다.
오류 원인: jsp 페이지에서name이'act'인 노드에signin을 부여하고form표를 제출한 후에 이 인자를 받지 않았습니다. 따라서 이 오류는name이'act'인 노드에 값을 부여하는 오류입니다.
해결 방법: 액션에서 이 매개 변수act를 설명하고 get을 설정하고 set 방법으로 수신하면 문제가 해결됩니다.사실 문제의 글자 뜻에 따라 문제의 소재를 볼 수 있고, 같은 문제를 제시한 구두들을 공유할 수 있다.

좋은 웹페이지 즐겨찾기