2012-07-14 103 views
1

我一直在试图找出如何在Spring MVC中创建下拉框。 这里是我的控制器:Spring MVC下拉框

@ResourceMapping(value = "availableDataVis") 
public String getAvailableDataVis(Model model, 
          @RequestParam("widgetId") String widgetId) { 
    HashMap<String,Map<String,String>> hashMapOfDataVis = new HashMap<String,Map<String,String>>(); 

    Map<String,String> m = new LinkedHashMap<String,String>(); 
    m.put("pie", "Pie Chart"); 
    m.put("categorizedVertical", "Column Chart"); 
    hashMapOfDataVis.put("m", m); 

    if (hashMapOfDataVis.containsKey(widgetId)) 
    { 
     model.addAttribute("dataVisArray", hashMapOfDataVis.get(widgetId)); 
    } 

    return "selDataVisComboBox"; 
} 

,这里是JSP页面:

<%@ page contentType="text/html;charset=UTF-8" language="java" %> 
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> 
<form:select path="dataVisArray" items="${dataVisArray}" /> 

实际输出:

ERROR 
Cause: javax.portlet.PortletException: org.apache.jasper.JasperException: java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'dataVisArray' available as request attribute 
Message: org.apache.jasper.JasperException: java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'dataVisArray' available as request attribute 
StackTrace: 
javax.portlet.PortletException: org.apache.jasper.JasperException: java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'dataVisArray' available as request attribute 
    at org.jboss.portal.portlet.impl.jsr168.api.PortletRequestDispatcherImpl.dispatch(PortletRequestDispatcherImpl.java:169) 
    at org.jboss.portal.portlet.impl.jsr168.api.PortletRequestDispatcherImpl.include(PortletRequestDispatcherImpl.java:84) 
... 

预期输出:

<select id="dataVis" name="dataVis"> 
    <option value="pie">Pie Chart</option> 
    <option value="categorizedVertical">Column Chart</option> 
</select> 
+1

此代码仅在widgetId请求参数=“m”时才有效。你检查过这是真的吗? – MattR 2012-07-14 13:46:47

+0

是的,确切地说。谢谢。 – abg 2012-07-14 14:32:08

回答

2

你试过做某事像这样?

<form:select path="dataVisArray"><br /> 
    <form:option label="Select..." value=""/> 
    <form:options items="${dataVisArray} itemLabel="label" itemValue="value"/> 
</form:select>