在jsp页面中使用list列表来传递信息到action
2016-01-05 13:46
531 查看
经常需要批量的增加某些信息,突然看到书中写到使用List列表来传输,但是由于没有注意语法,弄了好久还是错,小结下这个问题。针对一个图书订购系统页面为例,需要批量的添加购买的书籍
在Jsp页面传递需要到Action的List中的数据,书写格式为<s:textfield name="%{'books['+#status.index+'].title'}" /> 或者
<body>
<h1>图书订购系统</h1>
<s:form action="bookConfirm" method="post" theme="simple">
<table>
<tr>
<td>书名</td>
<td>价格</td>
<td>数量</td>
</tr>
<s:iterator value="new int[5]" status="status">
<tr>
<td><s:textfield name="%{'books['+#status.index+'].title'}" /></td>
<td><s:textfield name="%{'books['+#status.index+'].price'}" /></td>
<td><s:textfield name="%{'books['+#status.index+'].amount'}" /></td>
</tr>
</s:iterator>
<tr>
<td colspan="3"><s:submit value="订阅图书" /></td>
</tr>
</table>
</s:form>
</body>
书籍的实例对象定义为
请求的Action中定义列表List有两种不同的方式,如果我们在定义列表的时候已经为List限定了泛型,那么书写的格式如下(1)即可,否则需要如(2)代码所示,还要为Action添加一个ObjectTypeDeterminer对象来限定集合元素的类型。
(1)
文件命名格式为:classname-conversion.properties文件内添加语句
Element_books=com.addbooks.Book
其实就是定义集合元素的类型,具体的语法可以参考相关资料,当时就是没有为集合元素定义泛型,除了以下错误,问题的来源就是无法知道集合的类型。
文件的目录为:
在Jsp页面传递需要到Action的List中的数据,书写格式为<s:textfield name="%{'books['+#status.index+'].title'}" /> 或者
<pre name="code" class="html" style="font-size: 18px;"><s:textfield name="books[#status.index].title" />
在这里为Book对象传递的有3个值,书写语法都一样,代码如下
<body>
<h1>图书订购系统</h1>
<s:form action="bookConfirm" method="post" theme="simple">
<table>
<tr>
<td>书名</td>
<td>价格</td>
<td>数量</td>
</tr>
<s:iterator value="new int[5]" status="status">
<tr>
<td><s:textfield name="%{'books['+#status.index+'].title'}" /></td>
<td><s:textfield name="%{'books['+#status.index+'].price'}" /></td>
<td><s:textfield name="%{'books['+#status.index+'].amount'}" /></td>
</tr>
</s:iterator>
<tr>
<td colspan="3"><s:submit value="订阅图书" /></td>
</tr>
</table>
</s:form>
</body>
书籍的实例对象定义为
public class Book { private String title; private float price; private int amount; public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public float getPrice() { return price; } public void setPrice(float price) { this.price = price; } public int getAmount() { return amount; } public void setAmount(int amount) { this.amount = amount; } }
请求的Action中定义列表List有两种不同的方式,如果我们在定义列表的时候已经为List限定了泛型,那么书写的格式如下(1)即可,否则需要如(2)代码所示,还要为Action添加一个ObjectTypeDeterminer对象来限定集合元素的类型。
(1)
public class BookConfirm extends ActionSupport { private static final long serialVersionUID = 1L; private List<Book> books =null; public List<Book> getBooks() { return books; } public void setBooks(List<Book> books) { System.out.println("enter"); this.books = books; } }(2)
public class BookConfirm extends ActionSupport { private static final long serialVersionUID = 1L; private List books =null; public List getBooks() { return books; } public void setBooks(List books) { System.out.println("enter"); this.books = books; } }在Action所在目录下定义一个文件BookConfirm-conversion.properties,
文件命名格式为:classname-conversion.properties文件内添加语句
Element_books=com.addbooks.Book
其实就是定义集合元素的类型,具体的语法可以参考相关资料,当时就是没有为集合元素定义泛型,除了以下错误,问题的来源就是无法知道集合的类型。
<span style="font-size:14px;">警告: Error setting value [[Ljava.lang.String;@49c49336] with expression [books[1].price] Class: com.opensymphony.xwork2.ObjectFactory File: ObjectFactory.java Method: buildBean Line: 158 - com/opensymphony/xwork2/ObjectFactory.java:158:-1 at com.opensymphony.xwork2.ognl.accessor.XWorkListPropertyAccessor.getProperty(XWorkListPropertyAccessor.java:113) at ognl.OgnlRuntime.getProperty(OgnlRuntime.java:2317) at ognl.ASTProperty.getValueBody(ASTProperty.java:114) at ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212) at ognl.SimpleNode.getValue(SimpleNode.java:258) at ognl.ASTChain.setValueBody(ASTChain.java:222) at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:220) at ognl.SimpleNode.setValue(SimpleNode.java:301) at ognl.Ognl.setValue(Ognl.java:737) at com.opensymphony.xwork2.ognl.OgnlUtil$1.execute(OgnlUtil.java:287) at com.opensymphony.xwork2.ognl.OgnlUtil$1.execute(OgnlUtil.java:282) at com.opensymphony.xwork2.ognl.OgnlUtil.compileAndExecute(OgnlUtil.java:340) at com.opensymphony.xwork2.ognl.OgnlUtil.setValue(OgnlUtil.java:282) at com.opensymphony.xwork2.ognl.OgnlValueStack.trySetValue(OgnlValueStack.java:186) at com.opensymphony.xwork2.ognl.OgnlValueStack.setValue(OgnlValueStack.java:173) at com.opensymphony.xwork2.ognl.OgnlValueStack.setParameter(OgnlValueStack.java:151) at com.opensymphony.xwork2.interceptor.ParametersInterceptor.setParameters(ParametersInterceptor.java:303) at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:221) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244) at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:229) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244) at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:191) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244) at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:73) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244) at org.apache.struts2.interceptor.DateTextFieldInterceptor.intercept(DateTextFieldInterceptor.java:125) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244) at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:91) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244) at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:253) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244) at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244) at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244) at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244) at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244) at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:139) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244) at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244) at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:193) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244) at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:189) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244) at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54) at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:564) at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:81) at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1096) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:674) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:745) Caused by: java.lang.NullPointerException at com.opensymphony.xwork2.ObjectFactory.buildBean(ObjectFactory.java:158) at com.opensymphony.xwork2.ognl.accessor.XWorkListPropertyAccessor.getProperty(XWorkListPropertyAccessor.java:111) ... 71 more</span>
文件的目录为:
相关文章推荐
- JavaScript_在什么位置编写 JS 代码
- js代码的执行顺序
- js中substr,substring,indexOf,lastIndexOf,split 的用法
- js中控制时间
- js e.target
- extjs获取选中列表!
- DOM LEVEL 1 中的那些事儿[总结篇-上]
- JSON-C 的安装与使用
- 抓取Js动态生成数据且以滚动页面方式分页的网页
- js常用字符串操作方法
- javascript 如何避免属性访问错误
- js获取名字为XX的标签
- js 原生获取Class元素
- js获取页面的可视宽高度,占位宽高度,获取元素左上角相对页面左上角的位置,元素左上角相对可是区域的位置,元素是否存在于页面可视范围内
- Stack Overflow requires external JavaScript from another domain, which is blocked or failed to load
- webpy模版中写JS代码的陷阱
- js 浮点数加减问题
- CKEditor 自定义image插件
- 【JavaScript面向对象编程】20160105(对象)
- javascript 阻止多次点击造成的轮播混乱