原本没有学习struts2时,下拉列表框是用一个集合保存,然后放到作用域,在页面上使用<c:foreach>循环输出,这样没问题:
后台java代码
private List<Street> streetList; public List<Street> getStreetList() { return streetList; } public void setStreetList(List<Street> streetList) { this.streetList = streetList; } 在方法中为list赋值: streetList = new StreetBizImpl().getList();
页面上使用foreach正常输出,有显示值,也有隐藏值
<select> <c:forEach items="${streetList }" var="s"> <option value="${s.sid }">${s.name }</option> </c:forEach> </select>
但问题来了,使用struts2的ognl表达式就挂了:
<s:select list="streetList" listValue="name" listKey="sid"></s:select>
如果不加入listKey就没关系。
报500错误:
org.apache.jasper.JasperException: Error on line 63, column 15 in template/simple/select.ftl
stack.findString(parameters.listKey) is undefined.
It cannot be assigned to itemKeyStr - Class: freemarker.core.Assignment
File: Assignment.java
Method: accept
Line: 111 - freemarker/core/Assignment.java:111:-1
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:549)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:470)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
org.apache.struts2.dispatcher.ServletDispatcherResult.doExecute(ServletDispatcherResult.java:164)
org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResultSupport.java:186)
com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:371)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:275)
org.apache.struts2.interceptor.DeprecationInterceptor.intercept(DeprecationInterceptor.java:41)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:256)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:167)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265)
org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:249)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:249)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:191)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:73)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:91)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:252)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:139)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:193)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:189)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
web.interceptor.UserInterceptor.doIntercept(UserInterceptor.java:16)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54)
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:562)
org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99)
求大神指导,我实在找不出哪里的错了,我说下我想到过的点:①原本sid叫id,我怕是id重名过多,但改成sid还是不行。②项目编译不是最新的,我把项目导出→删除→导入,再次编译运行,还是不行。③可能是架包存在问题,但是我把架包删除完整重新放入了一边,还是不行。④我实在没辙了,在此求大神,我用的是Eclipse。现在只用了hibernate+struts2
相关推荐
`<html:select>`标签是Struts框架中非常重要的一个组成部分,它提供了丰富的功能来创建和管理下拉列表。通过合理地设置属性,开发者可以轻松地实现诸如设置默认选中项等功能,从而提高用户体验并简化开发过程。希望...
* <s:push>:value 的值 push 到栈中,从而使 property 标签的能够获取 value 的属性 Q: 无标签 R: * <s:radio>:单选按钮 * <s:reset>:重置按钮 S: * <s:select>:下拉框 T: 无标签 U: 无标签 V:...
在JSP页面中,我们可以使用Struts2的标签库(例如`s:textfield`, `s:checkbox`, `s:select`等)来创建表单元素,并将这些元素与Action的属性绑定。对于集合类型,我们通常会在JSP中通过迭代器遍历并生成多个表单...
`<s:property>`标签用于获取"value"属性的值,可以用来显示Action中的属性值。 P. `<s:radio>`,`<s:reset>`,`<s:select>`,`<s:set>`: `<s:radio>`创建单选按钮,常与列表结合使用。 `<s:reset>`标签用于创建...
在Struts2框架中,实现页面`<select>`标签默认选中的功能是非常实用且常见的需求。这不仅可以提高用户体验,还能让界面看起来更加专业。本文将详细介绍如何通过Struts2的相关标签来实现这一功能。 ### Struts2框架...
2. `<s:hidden>`:创建隐藏字段,用于存储不显示在页面上的数据。 I部分: 1. `<s:i18n>`:加载资源包到值栈,支持国际化。 2. `<s:include>`:包含一个Servlet或JSP页面。 J部分:无标签。 K部分:无标签。 L...
`<s:hidden>` 标签用于创建隐藏字段,常用于保存表单中不希望用户直接修改的信息。 ### 20. `<s:i18n>` 标签 `<s:i18n>` 标签用于国际化文本,可以从资源文件中获取翻译后的文本。 ### 21. `<s:include>` 标签 `...
4. <s:push value=""></s:push>-----value的值push到栈中,从而使property标签的能够获取value的属性 R: 1. 2. <s:radio list=""></s:radio>-----单选按钮 3. <s:reset></s:reset>-----重置按钮 S: 1...
这个标签在Struts框架中尤其常见,因为它与ActionForm对象的属性紧密关联,方便数据的提交和回显。以下是对`html:select`标签的详细解释和使用方法: ### 基本结构 `html:select`标签的基本结构如下: ```jsp ...
- `<s:property/>`:根据'value'属性显示值,可以从值栈中获取数据。 - `<s:push>`:将值压入栈,使得后续的`s:property`标签可以访问该值。 Q. `<s:radio>`: - 创建单选按钮,用户只能选择其中一个。 R. `<s:...
此外,Struts2还提供了一些其他标签,如表单标签(`<s:form>`)、错误处理标签(`<s:fielderror>`、`<s:errors>`)、国际化标签(`<s:text>`和`s:resourcebundle>`)等,它们帮助开发者轻松处理表单验证、错误提示和...
而在 Struts2 中,所有的标签都被统一管理,并通过在 JSP 文件头部声明 `<%@ taglib prefix="s" uri="/struts-tags" %>` 来启用 Struts2 的标签库。这种方式简化了开发过程中的配置工作,使得开发者可以更加专注于...
以上只是Struts2标签库中的一部分,实际上还有很多其他的标签,如`<s:textfield>`(文本输入框)、`<s:textarea>`(多行文本输入框)等,它们共同构成了Struts2强大的视图层支持,简化了Web开发中的页面构建工作。
在Struts2中,所有的标签都统一在`<s>`前缀下,通过引入`<%@ taglib prefix="s" uri="/struts-tags" %>`就可以在页面上使用这些标签。 **A组标签:** 1. `<s:a>` - 用于创建超链接,与HTML的`<a>`标签类似,可以...
Struts2作为Java Web开发中的一个重要框架,为开发者提供了丰富的标签库来简化Web页面的构建过程。根据官方文档所述,“UI标签又可以分为表单UI和非表单UI两部分”。本文将重点介绍这两部分标签的应用场景以及使用...
2. `<s:hidden>`:创建隐藏字段,用于存储不显示在页面上的值。 I部分: 1. `<s:i18n>`:加载国际化资源包到值栈,支持多语言应用。 2. `<s:include>`:包含其他JSP或Servlet页面的输出。 J部分: 1. `<s:...
本文将详细介绍如何利用 Struts2 的 `<s:bean>` 标签结合 `<s:iterator>` 标签来实现分页。 #### 二、`<s:bean>` 标签介绍 `<s:bean>` 是 Struts2 提供的一个用于创建 bean 实例的标签。它支持创建一个指定类的...
<s:merge var="mergedValue" values="%{value1},%{value2}"/> ``` #### 30. `<s:optgroup>` - 选项组标签 创建选项组。 ```xml <s:optgroup label="Group 1" list="group1Options"/> ``` #### 31. `<s:...
- `<s:property>`:显示或输出值栈中的对象属性。 - `<s:include>`:包含其他JSP或Action的结果。 2. **UI标签**: - **表单UI标签**: - `<s:form>`:创建HTML表单,支持POST和GET提交方式,可以设置enctype...
<s:param value="value2"/> </s:merge> ``` ##### 30. `<s:optgroup>` - 选项组标签 用于创建选项组。 ```jsp <s:optgroup label="Group1"> <s:option value="1" label="Option1"/> <s:option value="2" label=...