对于提交数据比较多的表单,为了避免大量地在FormBean里面使用大量的变量及setter和getter方法,从Struts1.2和Struts1.3起,FormBean中可以使用POJO,提交数据后将直接把数据赋给POJO。
public class UserBeanForm extends ActionForm {
private Person person = new Person();
private String action;
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
public String getAction() {
return action;
}
public void setAction(String action) {
this.action = action;
}
提示:Struts不会自动创建POJO对象,这里需要用new实例化一个Person对象,否则为Person设置属性时,结合jsp页面会抛出以下错误:
严重: Servlet.service() for servlet [jsp] in context with path [/struts1] threw exception [javax.servlet.ServletException: javax.servlet.jsp.JspException: Invalid argument looking up property: "person.name" of bean: "org.apache.struts.taglib.html.BEAN"] with root cause
javax.servlet.jsp.JspException: Invalid argument looking up property: "person.name" of bean: "org.apache.struts.taglib.html.BEAN"
at org.apache.struts.taglib.TagUtils.lookup(TagUtils.java:887)
at org.apache.struts.taglib.html.BaseFieldTag.prepareValue(BaseFieldTag.java:123)
at org.apache.struts.taglib.html.BaseFieldTag.renderInputElement(BaseFieldTag.java:102)
at org.apache.struts.taglib.html.BaseFieldTag.doStartTag(BaseFieldTag.java:80)
at org.apache.jsp.userInfo_jsp._jspx_meth_html_005ftext_005f0(userInfo_jsp.java:224)
at org.apache.jsp.userInfo_jsp._jspx_meth_html_005fform_005f0(userInfo_jsp.java:148)
at org.apache.jsp.userInfo_jsp._jspService(userInfo_jsp.java:116)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:433)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:389)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:964)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1824)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
看似是jsp的错误,但是实际上是没有创建POJO的错误。
分享到:
相关推荐
Struts2使用值栈管理Action实例和Pojo属性。当用户请求到达时,Struts2会自动将请求参数绑定到Action的Pojo属性上,这个过程称为数据驱动(Data Binding)。值栈允许在Action之间共享数据,同时也支持动态方法调用...
在这个工具类中,我们使用反射API来获取Pojo类的所有字段,然后将这些字段的名称作为Map的键,字段的值作为对应的值。注意,这个方法只处理当前类的字段,如果Pojo类中有嵌套的其他Pojo对象,它们不会被自动展开。若...
- **Struts1**: 使用Commons-BeanUtils进行数据绑定,每一个表单字段都需要单独处理。 - **Struts2**: 使用OGNL进行数据绑定,支持更高级的数据绑定操作。 #### 验证机制 - **Struts1**: 支持ActionForm的内置...
ActionSupport 类则提供了常用功能的实现,但 Action 接口并非强制,任何包含 execute 方法的普通 Java 对象(POJO)都能作为 Struts2 的 Action。 2. **线程模型**: - Struts1 的 Action 实例是单例的,这意味着...
然而,通过一些改进和扩展,我们可以使Struts1再次焕发活力,支持注解和POJO风格的Action,以适应现代开发的需求。 首先,让我们深入理解Struts1的核心概念: 1. **Action类**:在传统的Struts1中,Action类是处理...
- POJO类应遵循JavaBean规范,提供默认构造函数以及getter和setter方法。 - 需要处理特殊数据类型,如日期、枚举等,确保数据转换正确无误。 - 当数据库表结构变化时,记得同步更新对应的POJO类。 综上所述,...
此外,Struts2的ActionSupport基类提供了对常用接口的实现,使得Action对象的创建更加灵活,不再局限于Action接口,任何具有execute方法的POJO对象都可以作为Struts2的Action对象。 线程模型方面,Struts1采用单例...
值得注意的是,在Struts2中,Action接口并不是强制性的,任何包含`execute`标记的方法所在的POJO都可以用作Action对象。 #### 二、线程安全模型 - **Struts1** 中的Action采用的是单例模式,这意味着对于所有的...
这个插件的使用极大地减少了手动编写POJO类的工作量,使得开发者可以更专注于业务逻辑。同时,它还可以自定义生成的代码风格,适应不同的编码规范。对于大型项目,这无疑提高了开发效率,降低了出错的可能性。 除了...
- **Struts2**:Action类可以实现Action接口或者直接使用ActionSupport基类,也可以是任何具有`execute`方法的普通Java对象(POJO),这增加了代码的可定制性和可扩展性。 2. **线程模式**: - **Struts1**:...
此外,Struts2支持POJO风格的Action,即普通的Java对象也可以作为Action使用。 #### 二、依赖于Servlet API的程度不同 - **Struts1**: 在Struts1中,Action直接依赖于Servlet API,如`HttpServletRequest`和`...
值得注意的是,在Struts2中,Action接口并不是必需的,任何包含`execute`标记的POJO(Plain Old Java Object)对象都可以作为Action对象使用。 #### 2. 线程安全模式的不同 - **Struts1**: Struts1中的Action采用...
- **Struts1.x** 的测试通常需要使用如StrutsTestCase等第三方工具,由于Action的`execute`方法直接暴露了Servlet API,测试较为复杂。 - **Struts2** 提供了更好的测试支持,Action可以通过设置属性、初始化和...
本笔记主要探讨了如何在SpringMVC中使用POJO来处理请求参数,以及SpringMVC如何自动将请求参数填充到对应的POJO对象中。 首先,理解POJO的概念。POJO是一个简单的Java对象,没有特定的约束或依赖于任何框架。在SSM...
而Struts2则更倾向于使用接口,Action类可以实现Action接口或其他自定义接口,甚至可以直接使用具有execute方法的POJO对象。Struts2还提供了一个ActionSupport基类,以方便实现常见的接口功能,如国际化和数据验证。...
3. **获取所有方法**:使用`obj.getClass().getDeclaredMethods()`获取POJO类中的所有方法,包括public、protected、private等访问级别的方法。 4. **遍历方法**:遍历所有方法,筛选出所有以“get”开头的方法,即...
值得注意的是,在Struts 2中,即使是简单的POJO(Plain Old Java Object)对象,只要包含`execute`方法,就可以作为Action使用。 #### 2. 线程模式方面的对比 - **Struts 1**:Action采用单例模式,这意味着所有...
《POJO In Action》是一本深入探讨Plain Old Java Object(POJO)概念和技术的书籍,其核心在于如何在Java开发中有效地使用简单、无框架依赖的对象。POJOs是Java编程中最基本的元素,它们代表了纯粹的面向对象设计,...
1、Struts1 里使用 ActionServlet 作为控制器; Struts2 使用了一个过滤器作为控制器 2、Struts1 中每个 HTML 表单都对应一个 ActionForm 实例. Struts2 中, HTML 表单将被直接映射到一个 POJO. 3、Struts1 的验证...