2014-09-29 3 views
0

Я хочу, чтобы отправить элемент списка (который находится на моем JSP):Отправить список для тегов JSP

${mylist} 

К моему пользовательским тегам mytag.tag, это то, что у меня есть в моей странице JSP:

<tags:mytag list="${mylist}" ></tagsmytag> 

Но Когда я посылаю это так, я не могу получить доступ к его элементам, вот mytag.tag:

<%@ taglib uri="http://www.springframework.org/tags/form" prefix="springForm"%> 
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> 
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 

<%@attribute name="list" required="true"%> 

<c:forEach items="${pageScope.list}" var="listVar"> 
    <option value="${listVart[0]}">${listVar[1]}</option> 
</c:forEach> 

Backend контроллер:

@ModelAttribute("mylist") 
List<Permission> getAllActivePermissions(){ 
    return permissionService.getAllActivePermissions(); 
} 

Исключение:

javax.el.PropertyNotFoundException: Property '0' not found on type java.lang.String 
at javax.el.BeanELResolver$BeanProperties.get(BeanELResolver.java:237) 
at javax.el.BeanELResolver$BeanProperties.access$400(BeanELResolver.java:214) 
at javax.el.BeanELResolver.property(BeanELResolver.java:325) 
at javax.el.BeanELResolver.getValue(BeanELResolver.java:85) 
at org.apache.jasper.el.JasperELResolver.getValue(JasperELResolver.java:104) 
at org.apache.el.parser.AstValue.getValue(AstValue.java:183) 
at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:185) 
at org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:1026) 
at org.apache.jsp.tag.webmultiple_tag._jspx_meth_c_005fforEach_005f1(webmultiple_tag.java:454) 
at org.apache.jsp.tag.webmultiple_tag._jspx_meth_springForm_005fselect_005f1(webmultiple_tag.java:413) 
at org.apache.jsp.tag.webmultiple_tag._jspx_meth_c_005fotherwise_005f0(webmultiple_tag.java:375) 
at org.apache.jsp.tag.webmultiple_tag.doTag(webmultiple_tag.java:222) 
at org.apache.jsp.WEB_002dINF.pages.roles.newRole_jsp._jspx_meth_tags_005fmultiple_005f0(newRole_jsp.java:674) 
at org.apache.jsp.WEB_002dINF.pages.roles.newRole_jsp._jspx_meth_springForm_005fform_005f0(newRole_jsp.java:566) 
at org.apache.jsp.WEB_002dINF.pages.roles.newRole_jsp._jspService(newRole_jsp.java:378) 
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432) 
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) 
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:749) 
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:487) 
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:412) 
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:339) 
at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:209) 
at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:267) 
at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1221) 
at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1005) 
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:952) 
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870) 
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961) 
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) 
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) 
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:947) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1009) 
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) 
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310) 
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918) 
at java.lang.Thread.run(Thread.java:695) 

В чем проблема с этим? Какова лучшая стратегия отправки списков в теги?

+0

от бэкэнда, что вы отправляете, покажите нам код, как вы его отправили. –

+0

@ user3145373 ツ добавил в сообщение! видеть это ! – Hatem

ответ

5

попробовать:

<c:forEach items="${mylist.list}" var="listVar" varStatus="i"> 
    <option value="${listVar[0]}">${listVar[1]}</option> 
</c:forEach> 

здесь, mylist является ModelAttribute & list the name of List, которые вы отправляете из controller. тоже использование varStatus атрибут c:foreach бирка, никогда не использовать direct index like you have used. Если вы хотите его использовать, тогда поставьте его в состояние if list size > 0, после чего он войдет внутрь него.

Вы также переменную Опечатка:

<option value="${listVar[0]}"> вы использовали listVart.

Look Here - это простой учебник от mkyong.

+0

Я, по мне, это Истинное решение. – Krishna

+0

Это будет верно, если вы выполняете на самой странице jsp, я хочу отправить этот список в тег jsp (mytag.tag). «mylist» не обязательно иметь имя «mylist» как атрибут модели, поэтому я хочу отправить сам список для обрабатываемого тега! – Hatem

+0

@Hatem: попробуйте использовать это имя напрямую. Кстати, как называется ваш список? Вы только что показали код возврата из службы, поэтому у меня нет идеи, что именно имя вашего списка точно. –

0

Я получил решение, наконец, я должен указать тип (список) атрибуту (список):

<%@attribute name="list" required="true"%> 

быть:

<%@attribute name="list" required="true" type="java.util.List" %> 
0

установить значение с помощью набора

 <c:set var="list" value=${myList} scope="request"/> 

    <c:forEach items="${list}" var="listVar" varStatus="i"> 
     <option value="${listVar[0]}">${listVar[1]}</option> 
    </c:forEach>