Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring批量管理自定义问题,Freemarker未拾取模型属性_Spring_Spring Batch_Customization_Freemarker_Spring Batch Admin - Fatal编程技术网

Spring批量管理自定义问题,Freemarker未拾取模型属性

Spring批量管理自定义问题,Freemarker未拾取模型属性,spring,spring-batch,customization,freemarker,spring-batch-admin,Spring,Spring Batch,Customization,Freemarker,Spring Batch Admin,我目前正在尝试为一个企业项目扩展Spring批处理管理。我已经将基本的SBA设置集成到我的项目中,但我希望添加一些新功能。我试图添加的功能是我在网上找到的。到目前为止,我遇到的一件事是,当尝试添加新控制器和ftl模板时,模型在将控制器/模型绑定到视图时出现问题 我希望您能帮助我扩展SBA所需的其他配置(相对逐步)。我对Spring或Spring Batch并不陌生,但我对Freemarker非常陌生。关于Freemarker在传递到模型时如何从我的控制器拾取属性,似乎存在一些混淆 到目前为止,我

我目前正在尝试为一个企业项目扩展Spring批处理管理。我已经将基本的SBA设置集成到我的项目中,但我希望添加一些新功能。我试图添加的功能是我在网上找到的。到目前为止,我遇到的一件事是,当尝试添加新控制器和ftl模板时,模型在将控制器/模型绑定到视图时出现问题

我希望您能帮助我扩展SBA所需的其他配置(相对逐步)。我对Spring或Spring Batch并不陌生,但我对Freemarker非常陌生。关于Freemarker在传递到模型时如何从我的控制器拾取属性,似乎存在一些混淆

到目前为止,我有我想要使用的ftl模板(它从SBA的标准模板中选取)。这基本上是spring-batch-admin-manager.jar中默认ftl文件之一的修改版本:

<#import "/spring.ftl" as spring />
<@spring.bind "model"/>
<div id="job-triggers">

<h2>${MODEL_ATTRIBUTE_SEARCH_RESULT_MESSAGE}</h2>

<p/>

<#if fireTimes??>
    <table title="Future Job Executions"
           class="bordered-table">
        <tr>
            <th>Job Name</th>
            <th>Date</th>
        </tr>
        <#list fireTimes as execution>
            <#if execution_index % 2 == 0>
                <#assign rowClass="name-sublevel1-even" />
            <#else>
                <#assign rowClass="name-sublevel1-odd" />
            </#if>
            <tr class="${rowClass}">
                <#assign execution_url><@spring.url relativeUrl="${servletPath}/jobs/${execution.jobName?c}"/></#assign>
                <td>${execution.jobName}</td>
                <td>${execution.date}</td>
            </tr>
        </#list>
    </table>
    <#if startJobExecution??>
        <ul class="controlLinks">
            <#assign executions_url><@spring.url relativeUrl="${servletPath}/jobs/executions"/></#assign>
            <li>Rows: ${startJobExecution}-${endJobExecution} of ${totalJobExecutions}</li>
            <#if nextJobExecution??><li><a href="${executions_url}?startJobExecution=${nextJobExecution?c}&pageSize=${pageSize!30}">Next</a></li></#if>
            <#if previousJobExecution??><li><a href="${executions_url}?startJobExecution=${previousJobExecution?c}&pageSize=${pageSize!30}">Previous</a></li></#if>
            <!-- TODO: enable pageSize editing -->
            <li>Page Size: ${pageSize!30}</li>
        </ul>
    </#if>
</#if>

我还有必要的getter/setter,用于setter注入和从视图访问变量。关于为什么Freemarker无法拾取我添加到地图中的属性,有什么想法吗?任何帮助都将不胜感激

由于您使用的是
ModelMap
,因此可以使用
put
而不是
addAttribute
。最后,您的代码应该如下所示:

 if(fireTimes.isEmpty()) {
        model.put(MODEL_ATTRIBUTE_SEARCH_RESULT_MESSAGE,"No firetimes found between " + DATE_FORMAT.format(from) + " and " + DATE_FORMAT.format(to));
    } else {
        model.put(MODEL_ATTRIBUTE_SEARCH_RESULT_MESSAGE, fireTimes.size() + " firetimes found between" + DATE_FORMAT.format(from) + " and " + DATE_FORMAT.format(to));
    }
如果这不起作用,就试着把它变成
模型
,而不是
ModelMap

<import resource="classpath:/applicationContext.xml"/>
<import resource="classpath*:/META-INF/spring/batch/servlet/resources/*.xml" />
<import resource="classpath*:/META-INF/spring/batch/servlet/manager/*.xml" />

<context:component-scan base-package="com.basepackage.where.my.controller.components.are" />

<bean name="firetimesView" parent="standard">
    <property name="attributes">
        <props merge="true">
            <prop key="body">/firetimesView.ftl</prop>
            <prop key="titleCode">fire.times.title</prop>
            <prop key="titleText">Fire Times</prop>
        </props>
    </property>
</bean>
freemarker.core.InvalidReferenceException: Expression MODEL_ATTRIBUTE_SEARCH_RESULT_MESSAGE is undefined on line 5, column 11 in firetimesView.ftl.
freemarker.core.TemplateObject.assertNonNull(TemplateObject.java:124)
freemarker.core.Expression.getStringValue(Expression.java:118)
freemarker.core.Expression.getStringValue(Expression.java:93)
freemarker.core.DollarVariable.accept(DollarVariable.java:76)
freemarker.core.Environment.visit(Environment.java:209)
freemarker.core.MixedContent.accept(MixedContent.java:92)
freemarker.core.Environment.visit(Environment.java:209)
freemarker.core.Environment.include(Environment.java:1482)
freemarker.core.Include.accept(Include.java:169)
freemarker.core.Environment.visit(Environment.java:209)
freemarker.core.MixedContent.accept(MixedContent.java:92)
freemarker.core.Environment.visit(Environment.java:209)
freemarker.core.Environment.process(Environment.java:189)
freemarker.template.Template.process(Template.java:237)
org.springframework.web.servlet.view.freemarker.FreeMarkerView.processTemplate(FreeMarkerView.java:366)
org.springframework.web.servlet.view.freemarker.FreeMarkerView.doRender(FreeMarkerView.java:283)
org.springframework.web.servlet.view.freemarker.FreeMarkerView.renderMergedTemplateModel(FreeMarkerView.java:233)
org.springframework.batch.admin.web.freemarker.AjaxFreeMarkerView.renderMergedTemplateModel(AjaxFreeMarkerView.java:107)
org.springframework.web.servlet.view.AbstractTemplateView.renderMergedOutputModel(AbstractTemplateView.java:167)
org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:263)
org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1208)
org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:992)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:939)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:936)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:827)
javax.servlet.http.HttpServlet.service(HttpServlet.java:734)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812)
javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
org.springframework.web.filter.ShallowEtagHeaderFilter.doFilterInternal(ShallowEtagHeaderFilter.java:73)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
 if(fireTimes.isEmpty()) {
        model.put(MODEL_ATTRIBUTE_SEARCH_RESULT_MESSAGE,"No firetimes found between " + DATE_FORMAT.format(from) + " and " + DATE_FORMAT.format(to));
    } else {
        model.put(MODEL_ATTRIBUTE_SEARCH_RESULT_MESSAGE, fireTimes.size() + " firetimes found between" + DATE_FORMAT.format(from) + " and " + DATE_FORMAT.format(to));
    }