2012-07-14 52 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>