问题场景: 在使用表单向Action传递数据的时候, 遇到了这个问题, 导致了空指针异常.

问题描述:

10:14:56.622 [http-nio-8080-exec-45] ERROR com.opensymphony.xwork2.interceptor.ParametersInterceptor - Developer Notification (set struts.devMode to false to disable this message):
Unexpected Exception caught setting 'password' on 'class com.bj186.crm.web.action.UserAction: Error setting expression 'password' with value ['123456', ]
10:14:56.648 [http-nio-8080-exec-45] ERROR com.opensymphony.xwork2.interceptor.ParametersInterceptor - Developer Notification (set struts.devMode to false to disable this message):
Unexpected Exception caught setting 'submit' on 'class com.bj186.crm.web.action.UserAction: Error setting expression 'submit' with value ['', ]
10:14:56.649 [http-nio-8080-exec-45] ERROR com.opensymphony.xwork2.interceptor.ParametersInterceptor - Developer Notification (set struts.devMode to false to disable this message):
Unexpected Exception caught setting 'username' on 'class com.bj186.crm.web.action.UserAction: Error setting expression 'username' with value ['艾格尼丝', ]
java.lang.NullPointerException
at com.bj186.crm.web.action.UserAction.login(UserAction.java:70)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at ognl.OgnlRuntime.invokeMethod(OgnlRuntime.java:902)
at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1547)
at ognl.ObjectMethodAccessor.callMethod(ObjectMethodAccessor.java:68)

问题分析: 这个问题非常隐蔽, 是Struts2在接受值的时候, 不能正确的接收. 问题的根本原因在于没有创建接收数据的对象

解决思路: 在Action中把需要接收数据的类的对象new出来

private User user = new User();

并且设置它的getter和setter方法

然后这个问题就解决了!!!

附Struts2的UserAction.java的代码

package com.bj186.crm.web.action;

import com.bj186.crm.entity.User;
import com.bj186.crm.service.UserService;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.opensymphony.xwork2.util.ValueStack;
import org.apache.struts2.ServletActionContext;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils; import javax.servlet.ServletContext;
import java.util.Arrays;
import java.util.List; public class UserAction extends ActionSupport implements ModelDriven<User> {
private User user = new User();
private UserService userService;
private ValueStack valueStack; //测试添加上User的get和set方法
public void setUser(User user) {
//ServletActionContext.getRequest().getParameter("username")
this.user = user;
} public User getUser() {
return user;
} public void setUserService(UserService userService) {
this.userService = userService;
} public UserAction() {
//1.获取ServletContext
ServletContext servletContext = ServletActionContext.getServletContext();
//2.通过整合包中的工具类, 从servletContext的作用域上获取目标--Spring的容器WebApplicationContext
WebApplicationContext webApplicationContext = WebApplicationContextUtils.getWebApplicationContext(servletContext);
//3.从Spring的容器中获取对象
userService = webApplicationContext.getBean("userService", UserService.class);
System.out.println("userService:"+userService);
//4.获取值栈
ActionContext context = ActionContext.getContext();
valueStack = context.getValueStack();
} public String execute() {
System.out.println("正在UserAction的execute()方法中!");
return Action.SUCCESS;
} /**
* 添加用户
* @return 字符串状态
*/
public String register() {
User user = (User) valueStack.findValue("user");
userService.register(user);
return Action.SUCCESS;
} /**
* 用户登录
* @return
*/
public String login() {
String username = user.getUsername();
String password = user.getPassword();
boolean isLogin = userService.verifyLogin(username,password);
return isLogin? Action.SUCCESS: Action.NONE;
} /**
* 删除用户
* @return 字符串状态
*/
public String deleteUser(Integer uid) {
userService.deleteUser(uid);
return Action.SUCCESS;
} /**
* 修改用户
* @return 字符串状态
*/
public String updateUser() {
User user = (User)valueStack.findValue("user");
userService.updateUser(user);
return Action.SUCCESS;
} /**
* 查询用户
* @return 字符串状态
*/
public String getUserById(Integer uid) {
User user = userService.selectUserById(uid);
System.out.println("查询出来的用户是: " + user);
return Action.SUCCESS;
} /**
* 显示用户页面
* @return
*/
public String showAllUsers() {
System.out.println("显示所有的用户");
return Action.SUCCESS;
} /**
* 查询出所有的用户
* @return
*/
public String selectAllUsers() {
List<User> userList = userService.selectAllUsers();
valueStack.set("userList",userList);
System.out.println("查到的用户个数为: " + userList.size());
return Action.SUCCESS;
} @Override
public User getModel() {
return user;
}
}

前端页面的index.jsp代码

<%-- Created by IntelliJ IDEA. --%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>用户管理系统首页</title>
</head>
<body>
<h2 style="color:red;">欢迎光临!</h2>
<form action="<%=request.getContextPath()%>/user_login.action" method="post">
<input name="username" type="text"><br/>
<input name="password" type="password"><br/>
<button name="submit" type="submit">登录</button>
</form>
</body>
</html>

Unexpected Exception caught setting 'username' on 'class com.bj186.crm.web.action.UserAction: Error setting expression 'username' with value ['艾格尼丝', ]的更多相关文章

  1. hibernate 异常:Unexpected Exception caught setting

    异常信息:Unexpected Exception caught setting 'outHeight' on 'class com.srpm.core.project.seismicFortific ...

  2. 五)使用 easyui-tabs 遭遇错误 Unexpected Exception caught setting '_' on

    十月 10, 2015 3:08:35 下午 com.opensymphony.xwork2.interceptor.ParametersInterceptor error 严重: Developer ...

  3. Unexpected exception 'Cannot run program ... error=2, No such file or directory' ... adb'

    Eclipse ADT Unexpected exception 'Cannot run program' up vote 8 down vote favorite 4 I have installe ...

  4. myEclipse Could not create the view: An unexpected exception was thrown.

    myEclipse 非正常关闭,打开后 service Explorer or Package Explorer 视图显示不出来.报“Could not create the view: An une ...

  5. (转)Could not create the view: An unexpected exception was thrown. 电脑突然断电,myeclipse非正常关闭,出现错误

    问题:电脑突然断电,myeclipse非正常关闭,“Package Explorer”非正常显示,出现错误“Could not create the view: An unexpected excep ...

  6. Could not create the view: An unexpected exception was thrown 异常处理

    MyEclipse 打开后有时候莫名的在server窗口里抛出"Could not create the view: An unexpected exception was thrown&q ...

  7. Could not create the view: An unexpected exception was thrown. 电脑突然断电,myeclipse非正常关闭,出现错误

    电脑突然断电,myeclipse非正常关闭,“Package Explorer”非正常显示,出现错误“Could not create the view: An unexpected exceptio ...

  8. Could not create the view: An unexpected exception was thrown.问题解决

    Could not create the view: An unexpected exception was thrown.问题解决 今天打开Myeclipse10的时候,发现server窗口出现一堆 ...

  9. An unexpected exception occurred while creating a change object. see the error log for more details

    今天再给Android项目工程中的包重命名时出现了这个错误(之前重命名的时候就没有出现,郁闷): An unexpected exception occurred while creating a c ...

随机推荐

  1. js 排列 组合

    <script> //组合 function C(arr, num){ var r=[]; (function f(t,a,n){ if (n==0) return r.push(t); ...

  2. 初识NDA

    领导要签署保密协议,全是英文,叫我来翻译一下,这样便接触到了NDA,翻译过程中遇到不少问题,既然接触到了,还是多查查资料了解一下,以备以后的不时之需. NDA 全称 Non Disclosure Ag ...

  3. 是时候开刷NOI了

    整天挨着毛爷爷,压力好大.. 看毛爷爷即将炖完NOI,我的确也该刷了 原则是从头到尾自己想(虽然看了一次题解),可以不A掉. NOI2009 day1: T1 题目略神,我还是不讲了...(就这题我W ...

  4. Codeforces702A - Maximum Increase【尺取】

    题意: 求一个连续的最长子序列长度: 思路: 没看仔细还wa1了-以为LIS- 然后写了尺取吧...= =太不仔细了.不过收获是LIS特么写挫了然后看了学长的blog<-点我- 题目的挫code ...

  5. hdu1863 畅通工程 基础最小生成树

    #include <iostream> #include <cstdio> #include <algorithm> #define N 110 #define M ...

  6. git for mac

    Git 使用 1.下载完成后打开终端,使用git --version或者which git命令查看安装版本,有就是安装成功了. 2.创建一个全球用户名.全球邮箱 git config --global ...

  7. 双端队列 HDOJ 3530 Subsequence

    题目传送门 题意:问最长子序列,满足区间最大值 - 最小值在[m, k]之间 分析:用双端队列维护最大值和最小值,保存的是位置.当满足条件时,更新最大值. /********************* ...

  8. Kruskal 2015百度之星初赛2 HDOJ 5253 连接的管道

    题目传送门 /* 最小生成树(Kruskal):以权值为头,带入两个端点,自然的排序;感觉结构体的并查集很好看 注意:题目老头要的是两个农田的高度差,中文水平不好,题意理解成和平均值的高度差! */ ...

  9. 快速分页:jsp标签pager-taglib

    一:简介 Pager-taglib,支持多种风格的分页显示.实际上它是一个Jsp标签库,为在JSP上显示分页信息而设计的一套标签,通过这些标签的不同的组 合,会形成多种不一样的分页页面,风格各异.它既 ...

  10. 155 Min Stack 最小栈

    设计一个支持 push,pop,top 操作,并能在常量时间内检索最小元素的栈.    push(x) -- 将元素x推入栈中.    pop() -- 删除栈顶的元素.    top() -- 获取 ...