Кнопка выбора пружины MVC - PullRequest
3 голосов
/ 11 января 2011

Я хочу создать простые HTML-теги выбора с некоторыми заполненными значениями (сейчас, что я наберу, позже из базы данных).Вот мой контроллер:

@Controller
public class HomeController {

    @RequestMapping("/test")

    public String home(){
        return "index";
    }

    @ModelAttribute("items")
    public ArrayList<String> getList(){
        ArrayList<String> itemList = new ArrayList<String>();
        itemList.add("one");
        itemList.add("two");
        itemList.add("three");
        return itemList;
    }

}

В моей индексной части приведен соответствующий HTML-код:

<div class="form-row">
   <label for="items">Items:</label>
   <span class="input"><form:select path="items" items="${items}" itemLabel="name" /></span>
</div>

Это приводит (это отображается в html):

<div class="form-row">

   <label for="items">Items:</label>

   <span class="input"><form:select path="items" items="[one, two, three]" itemLabel="name" /></span>

</div>

И я имел в виду еще что-то подобное (то, что я ожидал произвести):

<div class="form-row">

       <label for="items">Items:</label>

       <span class="input"><select name="name">
       <option>one</option>
       <option>two</option>
       <option>three</option>
       </select></span>

    </div>

Я мог бы изменить свой метод getList (), добавив <option> перед и </option> перед каждымЯ уверен, что есть более хороший способ сделать это, поэтому я спрашиваю здесь, пожалуйста, помните, что я только начинаю изучать Spring MVC.спасибо

ОБНОВЛЕНИЕ ВОПРОСА:

Когда я редактирую это в соответствии с предложением skaffman, добавляю:

<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %>

после

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>

и это вызвало это исключение:

org.apache.jasper.JasperException: An exception occurred processing JSP page /WEB-INF/views/index.jsp at line 39

36:     Date of birth: <input type="text" size="10" />
37:     <div class="form-row">
38:    <label for="items">Items:</label>
39:    <span class="input"><form:select path="items" items="${items}" itemLabel="name" /></span>
40: </div>
41:   </fieldset>
42:  


Stacktrace:
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:498)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:411)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:322)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:249)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238)
    org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:250)
    org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1063)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:801)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    org.tuckey.web.filters.urlrewrite.NormalRewrittenUrl.doRewrite(NormalRewrittenUrl.java:195)
    org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:159)
    org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:141)
    org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:90)
    org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:417)
    org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
    org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
root cause

org.springframework.beans.NotReadablePropertyException: Invalid property 'name' of bean class [java.lang.String]: Bean property 'name' is not readable or has an invalid getter method: Does the return type of the getter match the parameter type of the setter?
    org.springframework.beans.BeanWrapperImpl.getPropertyValue(BeanWrapperImpl.java:702)
    org.springframework.beans.BeanWrapperImpl.getPropertyValue(BeanWrapperImpl.java:694)
    org.springframework.web.servlet.tags.form.OptionWriter.doRenderFromCollection(OptionWriter.java:210)
    org.springframework.web.servlet.tags.form.OptionWriter.renderFromCollection(OptionWriter.java:180)
    org.springframework.web.servlet.tags.form.OptionWriter.writeOptions(OptionWriter.java:133)
    org.springframework.web.servlet.tags.form.SelectTag.writeTagContent(SelectTag.java:216)
    org.springframework.web.servlet.tags.form.AbstractFormTag.doStartTagInternal(AbstractFormTag.java:102)
    org.springframework.web.servlet.tags.RequestContextAwareTag.doStartTag(RequestContextAwareTag.java:79)
    org.apache.jsp.WEB_002dINF.views.index_jsp._jspx_meth_form_005fselect_005f0(index_jsp.java:206)
    org.apache.jsp.WEB_002dINF.views.index_jsp._jspService(index_jsp.java:109)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:369)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:322)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:249)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238)
    org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:250)
    org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1063)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:801)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    org.tuckey.web.filters.urlrewrite.NormalRewrittenUrl.doRewrite(NormalRewrittenUrl.java:195)
    org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:159)
    org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:141)
    org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:90)
    org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:417)
    org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
    org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)

1 Ответ

4 голосов
/ 11 января 2011

Это ваша ошибка:

Недопустимое свойство 'name' класса бина [java.lang.String]: свойство bean-компонента 'name' не читается или имеет недопустимый метод получения:возвращаемый тип получателя соответствует типу параметра установщика?

Вы получаете это, потому что вы указали тегу использовать свойство name каждого элемента в списке при генерации<option> метки.Но ваш список состоит из строк, которые не имеют свойства name.

Просто удалите это из тега, и все будет в порядке, например:

<form:select path="items" items="${items}" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...