2015-03-17 1 views
1

Я следую учебному пособию по созданию нескольких флажков с использованием тега <s:checkboxlist>.Как сгенерировать флажки из списка <MyObject> с тегом <s: checkboxlist />?

Разница между моим проектом и учебником является то, что он использует List<String> для создания списка флажка, в то время как у меня есть List<KMCountry> (и нужно создать список флажка из текстового значения атрибута KMCountry объекта).

Действие

List<KMCountry> kmCountryListAll; 

public List<KMCountry> getKmCountryListAll() { 
    return kmCountryListAll; 
} 

Модель

@Entity 
@Table(name = "KM_COUNTRY") 
public class KMCountry implements Serializable { 

    @Id 
    @GeneratedValue 
    private Long idCountry; 

    @Column(name = "country") 
    private String name; 

    @Column(name = "workingHours") 
    private String workingHours; 

    // Getters and setters  
} 

JSP

<s:checkboxlist label="Select Countries" 
       list="kmCountryListAll" 
       listKey="idCountry" 
      listValue="name" 
       value="defaultCountry" /> 

Но этот способ не работает.

Используя отладчик, я вижу, что он входит в метод getKmCountryListAll() и возвращает kmCountryListAll список, но в представлении я получаю следующее сообщение об ошибке:

Expression parameters.name is undefined on line 38, column 32 in template/simple/checkboxlist.ftl. 
The problematic instruction: 
---------- 
==> ${parameters.name?html} [on line 38, column 30 in template/simple/checkboxlist.ftl] 
in user-directive s.iterator [on line 25, column 5 in template/simple/checkboxlist.ftl] 
in include "/${parameters.templateDir}/simple/checkboxlist.ftl" [on line 25, column 1 in template/css_xhtml/checkboxlist.ftl] 
---------- 

Java backtrace for programmers: 
---------- 
freemarker.core.InvalidReferenceException: Expression parameters.name is undefined on line 38, column 32 in template/simple/checkboxlist.ftl. 
    at freemarker.core.TemplateObject.assertNonNull(TemplateObject.java:124) 
    at freemarker.core.Expression.getStringValue(Expression.java:118) 
    at freemarker.core.Expression.getStringValue(Expression.java:93) 
    at freemarker.core.StringBuiltins$StringBuiltIn._getAsTemplateModel(StringBuiltins.java:71) 
    at freemarker.core.Expression.getAsTemplateModel(Expression.java:89) 
    at freemarker.core.Expression.getStringValue(Expression.java:93) 
    at freemarker.core.DollarVariable.accept(DollarVariable.java:76) 
    at freemarker.core.Environment.visit(Environment.java:210) 
    at freemarker.core.MixedContent.accept(MixedContent.java:92) 
    at freemarker.core.Environment.visit(Environment.java:210) 
    at freemarker.core.Environment.visit(Environment.java:299) 
    at freemarker.core.UnifiedCall.accept(UnifiedCall.java:130) 
    at freemarker.core.Environment.visit(Environment.java:210) 
    at freemarker.core.IfBlock.accept(IfBlock.java:82) 
    at freemarker.core.Environment.visit(Environment.java:210) 
    at freemarker.core.MixedContent.accept(MixedContent.java:92) 
    at freemarker.core.Environment.visit(Environment.java:210) 
    at freemarker.core.Environment.include(Environment.java:1483) 
    at freemarker.core.Include.accept(Include.java:169) 
    at freemarker.core.Environment.visit(Environment.java:210) 
    at freemarker.core.MixedContent.accept(MixedContent.java:92) 
    at freemarker.core.Environment.visit(Environment.java:210) 
    at freemarker.core.Environment.process(Environment.java:190) 
    at freemarker.template.Template.process(Template.java:237) 
    at org.apache.struts2.components.template.FreemarkerTemplateEngine.renderTemplate(FreemarkerTemplateEngine.java:157) 
    at org.apache.struts2.components.UIBean.mergeTemplate(UIBean.java:559) 
    at org.apache.struts2.components.UIBean.end(UIBean.java:513) 
    at org.apache.struts2.views.jsp.ComponentTagSupport.doEndTag(ComponentTagSupport.java:42) 
    at jsp_servlet._countryarea.__showmultiselectcountry._jsp__tag0(__showmultiselectcountry.java:107) 
    at jsp_servlet._countryarea.__showmultiselectcountry._jspService(__showmultiselectcountry.java:70) 
    at weblogic.servlet.jsp.JspBase.service(JspBase.java:34) 
    at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227) 
    at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125) 
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:300) 
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:183) 
    at weblogic.servlet.internal.RequestDispatcherImpl.invokeServlet(RequestDispatcherImpl.java:526) 
    at weblogic.servlet.internal.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:253) 
    at org.apache.struts2.dispatcher.ServletDispatcherResult.doExecute(ServletDispatcherResult.java:157) 
    at org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResultSupport.java:186) 
    at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:373) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:277) 
    at egp.prc.km.utils.interceptors.LiferayAjaxInterceptor.intercept(LiferayAjaxInterceptor.java:28) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
    at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176) 
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
    at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:263) 
    at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68) 
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
    at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:133) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
    at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207) 
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
    at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207) 
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
    at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:190) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
    at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
    at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
    at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:243) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
    at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
    at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
    at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:270) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
    at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
    at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171) 
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
    at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
    at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
    at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:190) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
    at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
    at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52) 
    at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:498) 
    at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77) 
    at org.apache.struts2.dispatcher.ng.servlet.StrutsServlet.service(StrutsServlet.java:76) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) 
    at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227) 
    at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125) 
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:300) 
    at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26) 
    at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56) 
    at weblogic.servlet.internal.RequestEventsFilter.doFilter(RequestEventsFilter.java:27) 
    at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56) 
    at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3715) 
    at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3681) 
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321) 
    at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120) 
    at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2277) 
    at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2183) 
    at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1454) 
    at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209) 
    at weblogic.work.ExecuteThread.run(ExecuteThread.java:178) 
<17-mar-2015 14.57.09 CET> <Error> <HTTP> <BEA-101020> <[[email protected][app:KM_Web_war_exploded module:KM-Web-1.0.0 path:/KMPortlets spec-version:2.5]] Servlet failed with Exception 
java.lang.NullPointerException 
    at weblogic.servlet.internal.ServletResponseImpl.sendContentError(ServletResponseImpl.java:611) 
    at weblogic.servlet.internal.ServletResponseImpl.sendError(ServletResponseImpl.java:655) 
    at org.apache.struts2.dispatcher.Dispatcher.sendError(Dispatcher.java:819) 
    at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:519) 
    at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77) 
    Truncated. see log file for complete stacktrace 
> 

Почему? Что мне не хватает? Как я могу решить эту проблему?

ответ

3

Вам нужно добавить атрибут name к вашему <s:checkboxlist> теге

+1

Также стоит отметить, что [документация неверна] (https://struts.apache.org/docs/checkboxlist.html), указывая атрибут 'name' как необязательный. Скопируйте и вставьте, вероятно. –

+1

Tnx так много !!! Ты спас мой день ;-) – AndreaNobili

1

В качестве «Expression parameters.name не определено в строке 38, столбец 32 в шаблон/простой/checkboxlist.ftl.» говорит, что вы должны добавить атрибут NAME к параметрам bean или любому параметру.

Смежные вопросы