Java Spring MVC将对象绑定解释为字符串
我试图创建一个包含所有用户报告下拉列表的Spring表单,但是jsp页面将我的对象绑定解释为字符串。我已经为此挣扎了一段时间,目前正在使用一个内联脚本来打印结果,但是我更喜欢使用对象绑定 view.jspJava Spring MVC将对象绑定解释为字符串,java,spring,spring-mvc,spring-form,Java,Spring,Spring Mvc,Spring Form,我试图创建一个包含所有用户报告下拉列表的Spring表单,但是jsp页面将我的对象绑定解释为字符串。我已经为此挣扎了一段时间,目前正在使用一个内联脚本来打印结果,但是我更喜欢使用对象绑定 view.jsp <%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%> <%@page import="com.cognos.developer.schemas.bibus._3.Report,
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<%@page
import="com.cognos.developer.schemas.bibus._3.Report, java.util.*"%>
<form:form method="POST" modelAttribute="reportView" action="">
<form:label path="defaultName.value">Name</form:label>
<form:input path="defaultName.value"/><br/>
<form:label path="base">Report Name</form:label>
<form:select path="base">
<form:options items="${reports}" itemValue="defaultName" itemLabel="defaultName" />
<%
//List<Report> reportList = (List)request.getAttribute("reports");
//for (Report r : reportList) {
// out.print("<option value=");
// out.print(r);
// out.println(">" + r +"</option>");
//}
%>
</form:select>
<form:label path="disabled.value">Disabled?</form:label>
<form:checkbox path="disabled.value"/>
<form:hidden path="searchPath.value" />
<div class="input-group-btn">
<input class="btn btn-default" type="submit" value="Update" />
</div>
</form:form>
名称
报告名称
残废
controller.java
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
//import org.springframework.web.servlet.ModelAndView;
import static org.springframework.web.bind.annotation.RequestMethod.GET;
import com.cognos.developer.schemas.bibus._3.Report;
@RequestMapping(value="/new", method=GET)
public String newView (@RequestParam("usr")String usr, Map<String, Object> model) {
//public String newView(){
cognos.checkConfig();
cognos.connectToCognos();
cognos.logonToCognosAsUsr(usr);
ReportView rv = new ReportView();
model.put("reportView", rv);
Map<String, String> map = new HashMap<String, String>();
map.put("STILL DOES NOT", "WORK");
model.put("reports", map);
//model.put("reports", cognos.fetchReports());
cognos.logoffFromCognos();
return "new_view";
}
import javax.servlet.ServletException;
导入javax.servlet.annotation.WebServlet;
导入javax.servlet.http.HttpServlet;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
导入org.springframework.beans.factory.annotation.Autowired;
导入org.springframework.stereotype.Controller;
导入org.springframework.validation.BindingResult;
导入org.springframework.validation.annotation.Validated;
导入org.springframework.web.bind.annotation.ModelAttribute;
导入org.springframework.web.bind.annotation.RequestMapping;
导入org.springframework.web.bind.annotation.RequestMethod;
导入org.springframework.web.bind.annotation.RequestParam;
//导入org.springframework.web.servlet.ModelAndView;
导入静态org.springframework.web.bind.annotation.RequestMethod.GET;
导入com.cognos.developer.schemas.bibus.\u 3.Report;
@RequestMapping(value=“/new”,method=GET)
公共字符串newView(@RequestParam(“usr”)字符串usr,映射模型){
//公共字符串newView(){
cognos.checkConfig();
cognos.connectToCognos();
cognos.logonToCognosAsUsr(usr);
ReportView rv=新的ReportView();
模型放置(“报告视图”,rv);
Map Map=newhashmap();
map.put(“仍然不”、“工作”);
模型放置(“报告”,地图);
//model.put(“reports”,cognos.fetchReports());
logoffFromCognos();
返回“新建视图”;
}
CognosService.java
public Map<String, Report> fetchReports() {
BaseClass bc[] = null;
String searchPath = "/content//report";
List<Report> rtn = new ArrayList<Report>();
try {
SearchPathMultipleObject spMulti =
new SearchPathMultipleObject(searchPath);
bc = cmService.query(spMulti, props, new Sort[] {}, new QueryOptions());
} catch (Exception e) {
e.printStackTrace();
}
if (bc != null) {
for (int i = 0; i < bc.length; i++) {
Report r = (Report)bc[i];
rtn.add(r);
}
}
Collections.sort(rtn, new ReportComparator());
for (Report rp : rtn){
reportList.put(rp.getStoreID().getValue().toString(), rp);
}
return reportList;
}
publicmap fetchReports(){
基类bc[]=null;
字符串searchPath=“/content//report”;
List rtn=new ArrayList();
试一试{
SearchPathMultipleObject spMulti=
新的SearchPathMultipleObject(searchPath);
bc=cmService.query(spMulti,props,new Sort[]{},new QueryOptions());
}捕获(例外e){
e、 printStackTrace();
}
if(bc!=null){
for(int i=0;i
web.xml
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Report Scheduler</display-name>
<servlet>
<servlet-name>views</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>views</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>views/index.jsp</welcome-file>
</welcome-file-list>
</web-app>
报表调度程序
意见
org.springframework.web.servlet.DispatcherServlet
1.
意见
/
views/index.jsp
views-servlet.xml
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<mvc:annotation-driven />
<context:component-scan base-package="com.enernoc.reporting.ReportScheduler" />
<!-- <mvc:resources mapping="/resources/**" location="/resources/" /> -->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix">
<value>/views/</value>
</property>
<property name="suffix" value=".jsp" />
</bean>
</beans>
/观点/
堆栈跟踪
org.apache.jasper.JasperException: An exception occurred processing JSP page /views/new_view.jsp at line 13
10: <form:input path="defaultName.value"/><br/>
11: <form:label path="base">Report Name</form:label>
12: <form:select path="base">
13: <form:options items="${reports}" itemValue="defaultName" itemLabel="defaultName" />
14: </form:select>
15: <form:label path="disabled.value">Disabled?</form:label>
16: <form:checkbox path="disabled.value"/>
Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:568)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:455)
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:728)
org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:168)
org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:303)
org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1228)
org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1011)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:955)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857)
javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
root cause
javax.servlet.ServletException: javax.servlet.jsp.JspException: Type [java.lang.String] is not valid for option items
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:912)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:841)
org.apache.jsp.views.new_005fview_jsp._jspService(new_005fview_jsp.java:103)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
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:728)
org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:168)
org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:303)
org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1228)
org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1011)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:955)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857)
javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
root cause
javax.servlet.jsp.JspException: Type [java.lang.String] is not valid for option items
org.springframework.web.servlet.tags.form.OptionWriter.writeOptions(OptionWriter.java:143)
org.springframework.web.servlet.tags.form.OptionsTag.writeTagContent(OptionsTag.java:157)
org.springframework.web.servlet.tags.form.AbstractFormTag.doStartTagInternal(AbstractFormTag.java:84)
org.springframework.web.servlet.tags.RequestContextAwareTag.doStartTag(RequestContextAwareTag.java:80)
org.apache.jsp.views.new_005fview_jsp._jspx_meth_form_005foptions_005f0(new_005fview_jsp.java:335)
org.apache.jsp.views.new_005fview_jsp._jspx_meth_form_005fselect_005f0(new_005fview_jsp.java:296)
org.apache.jsp.views.new_005fview_jsp._jspx_meth_form_005fform_005f0(new_005fview_jsp.java:144)
org.apache.jsp.views.new_005fview_jsp._jspService(new_005fview_jsp.java:93)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
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:728)
org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:168)
org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:303)
org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1228)
org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1011)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:955)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857)
javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
org.apache.jasper.JasperException:在第13行处理JSP页面/views/new_view.JSP时发生异常
10:
11:报告名称
12:
13:
14:
15:残疾?
16:
堆栈跟踪:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:568)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:455)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javaservlet.http.HttpServlet.service(HttpServlet.java:728)
org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:168)
org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:303)
org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1228)
org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1011)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:955)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857)
javaservlet.http.HttpServlet.service(HttpServlet.java:621)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
javaservlet.http.HttpServlet.service(HttpServlet.java:728)
根本原因
javax.servlet.ServletException:javax.servlet.jsp.jspeException:Type[java.lang.String]对选项项无效
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:912)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:841)
org.apache.jsp.views.new_005fview_jsp._jsp服务(new_005fview_jsp.java:103)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javaservlet.http.HttpServlet.service(HttpServlet.java:728)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javaservlet.http.HttpServlet.service(HttpServlet.java:728)
org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:168)
org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:303)
org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1228)
org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1011)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServle
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<%@page
import="com.cognos.developer.schemas.bibus._3.Report, java.util.*"%>
<form:form method="POST" modelAttribute="reportView" action="">
<form:label path="defaultName.value">Name</form:label>
<form:input path="defaultName.value"/><br/>
<form:label path="base">Report Name</form:label>
<form:select path="base">
<form:options items="${reports}" itemValue="YOUR_ID_OR_VALUE_FIELD_NAME" itemLabel="VALUE_PRESENTED_FIELD_NAME"/>
</form:select>
<form:label path="disabled.value">Disabled?</form:label>
<form:checkbox path="disabled.value"/>
<form:hidden path="searchPath.value" />
<div class="input-group-btn">
<input class="btn btn-default" type="submit" value="Update" />
</div>
</form:form>