`
Everyday都不同
  • 浏览: 724990 次
  • 性别: Icon_minigender_1
  • 来自: 宇宙
社区版块
存档分类
最新评论

解决struts2接收不到页面传递过来的对象VO的问题

阅读更多

本人最近利用struts2+ibatis+spring框架搭建web项目,需要写一个登录页面。众所周知,需要把JSP中输入的用户名、密码传递给后台action处理,判断用户名密码是否正确。其中会遇到很多action接收不到JSP页面传值而无法完成交互的问题,因此可以进行一一排查:

 

LoginAction:

private PortalUserVO portalUserVO;
	private UserService userService;
	private static final String LOGIN_VIEW = "login";
	private static final String LOGIN_SUCCESS = "success";
	private static final String LOGIN_FAILED = "login";
	
	public String doLoginView() {
		return LOGIN_VIEW;
	}
	
	public String doLogin() {
		String status = LOGIN_SUCCESS;
		String loginId = portalUserVO.getLoginId();
		String loginPasswd = portalUserVO.getPasswd();
		
		if(loginId == null || "".equals(loginId)) {
			errorMsg = "登录的用户名不能为空!";
			status = LOGIN_VIEW;
		}
		if(loginPasswd == null || "".equals(loginPasswd)) {
			errorMsg = "登录的用户密码不能为空!";
			status = LOGIN_VIEW;
		}
		
		try {
			PortalUserVO userVO = userService.getPortalUserByLoginId(portalUserVO.getLoginId());
			if(userVO == null) {
				errorMsg = "用户不存在,请检查输入!";
				status = LOGIN_FAILED;
			}else{
				if(!userVO.getPasswd().equals( portalUserVO.getPasswd())){
					errorMsg = "登录密码错误,请重新输入!";
					status = LOGIN_FAILED;
				}else{
					userService.updateUserLastLogin(portalUserVO);
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return status;
	}

 jsp页面:

 

<s:form id="portalUserForm"  action="Login!login.action" onsubmit="return VerifyData(this)" theme="simple">
               
                <div class="email-div">
                  <label for="remember"><strong class="email-label">帐号</strong></label>
                  <input  type="text" spellcheck="false" name="portalUserVO.loginId" value="" id="loginId" >
                </div>
               <div class="passwd-div">
                  <label for="Passwd"><strong class="passwd-label">密码</strong></label>
                  <input  type="password" name="portalUserVO.passwd" value="" id="passwd">
                </div>
                <input name="signIn" type="submit" class="" id="signIn" value=""/>
             </s:form>

 

 

情况一:报以下异常:

java.lang.NullPointerException
	at com.hy.action.LoginAction.doLogin(LoginAction.java:21)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:404)
	at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:267)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:229)
	at com.hy.action.AuthenticationInterceptor.intercept(AuthenticationInterceptor.java:20)

  我检查了很久,后来通过debug才发觉action接收到页面的登录VO为null,发现是LoginAction没有portalUserVO的get/set方法,遂加上:

 

 

	public PortalUserVO getPortalUserVO() {
		return portalUserVO;
	}

	public void setPortalUserVO(PortalUserVO portalUserVO) {
		this.portalUserVO = portalUserVO;
	}

 错误解决。

 

情况二:页面的name属性name="portalUserVO.xxx"一定要与action中的PortalUserVO portalUserVO一致。

 

情况三:是否在alias.xml配置文件中为JSP页面的vo配置过,否则会无法识别:

<sqlMap namespace="alias">
<typeAlias alias = "portalUserVO" type= "xx.entites.PortalUserVO" />	
</sqlMap>

 同时,entites里同样得设置get/set方法(这好像是废话……)

 

分享到:
评论

相关推荐

    struts2 (对象.属性)注入

    在LoginAction类中,我们定义了一个User对象,用来接收从JSP页面传递过来的数据。通过`setUser`方法,Struts2框架能够将表单数据自动绑定到User对象上。 #### 五、总结 通过以上分析可以看出,Struts2中的“对象....

    Struts2 的接受参数的几种方式

    值得注意的是,这种方式中模型对象需要被实例化,但不需要提供 setter 方法,因为 Struts2 会直接修改模型对象的属性。 ### 总结 Struts2 提供了多种灵活的方式来处理参数接收。直接设置变量适用于简单场景;使用...

    魔乐科技Struts2.x框架笔记

    **VO对象的应用**:为了实现数据的封装和传递,可以定义VO(Value Object)对象,并在Action中接收请求参数。如果发生错误,通常会跳转到`input`结果,以便用户修正输入。 #### 五、高级特性与最佳实践 **多业务分发...

    Struts+Spring+Hibernate通用分页解决方案

    查询结果返回给Action,Action再将数据封装成模型对象(VO/DTO),传递给视图层展示。 5. **通用性**:为了使分页解决方案具有通用性,我们需要抽象出一个公共的分页类或接口,包含总记录数、当前页、每页大小等...

    Struts、Spring、Hibernate&Ajax;学习笔记总结

    1. **ActionServlet**:Struts 的核心控制器,用于接收用户请求并调度 Action 对象。 2. **Action**:具体实现业务逻辑的对象,继承自 Struts 提供的基础 Action 类。 3. **ActionForm**:用于封装用户提交的数据,...

    Struts分页

    3. **模型对象(VO/DTO)**:查询结果通常会被封装到一个值对象(Value Object)或数据传输对象(Data Transfer Object)中,便于在Action和视图之间传递。 4. **ActionForm**(Struts 1)/**ModelDriven**(Struts...

    struts+spring+velocity

    5. Struts Action将VO传递给Velocity模板,Velocity模板使用VTL语句将数据插入到HTML模板中。 6. Velocity生成的HTML返回给客户端展示。 这种架构允许开发团队高效协作,同时保持良好的代码结构和可维护性。然而,...

    struts分页笔记

    2. **Action接收**:Struts框架接收到请求后,将请求参数传递给对应的Action类实例。在Action中,我们需要解析这些参数,比如页码(page)和每页数量(pageSize)。 3. **业务逻辑处理**:接着,Action调用服务层...

    SSH(Spring+Struts+Hibernate)

    在SSH框架中,数据的流动过程通常是这样的:JSP页面上的表单数据提交到Action,Action从ActionFormBean中获取数据,封装成VO(Value Object,值对象)或PO(Persistent Object,持久对象),然后调用Service层的方法...

    WebWork2.x源码分析

    ServletDispatcher是一个关键组件,它负责接收HTTP请求,将请求参数、会话数据、应用级数据等封装成一个Map对象,然后传递给XWork1.x框架。XWork1.x进一步通过Interceptor(拦截器)处理这些Map中的数据,将它们映射...

    EX快速开发一个功能.docx

    - **VO(View Object)**:视图对象,用于展示层与控制层之间的数据传递,通常包含页面展示所需的数据属性。 - **POJO(Plain Ordinary Java Object)**:简单的Java对象,纯粹的Java类,只有属性和getter、setter方法...

    Java项目使用小知识

    如果在MyEclipse中发布动态项目时遇到找不到类包的错误,检查是否缺少了必要的库,比如Struts的JAR包。确保这些依赖项被正确地添加到`WEB-INF/lib`目录中。 5. **Struts Action的调用方法** Struts中的Action调用...

    基于MVC设计模式的WEB应用框架研究

    【MVC设计模式详解及其...WebFramework则是对Struts的一种改进,旨在解决其复杂性问题,提供更简洁、易用的框架选择。对于开发者来说,理解和掌握MVC模式及其在不同框架中的应用,是提升开发能力和优化Web应用的关键。

Global site tag (gtag.js) - Google Analytics