【问题标题】:How to print bean values from session?如何从会话中打印 bean 值?
【发布时间】:2013-10-31 14:48:58
【问题描述】:

我想在我的 freemaker 模板中获取 bean 值。为此,我正在做的是?

在我的 java 类中:

MyBean myBean= new MyBean();
myBean.setName("ranveer");
session.setAttribute("MyBean", myBean);

我还创建了 setter 和 getter。

当我这样做时在模板中:

<#assign bean= Session.MyBean>
    ${bean}

它正在打印我的类包名称,但是当我在模板中这样做时:

 <#assign bean= Session.MyBean>
        ${bean.name}

Name 是我在 bean 中定义的属性,值是 ranveer 但它没有打印这个值。 StackTrace 是:

The Web Script /Test/service/inbox/sidebar has responded with a status of 500 - Internal Error.

500 Description:    An error inside the HTTP server which prevented it from fulfilling the request.

Message:    09310010 Failed to process template webscripts/inbox/inbox.sidebar.get.html.ftl

Exception:  freemarker.core.InvalidReferenceException - Expression ${bean.name} is undefined on line 5, column 11 in webscripts/inbox/inbox.sidebar.get.html.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:208)
    freemarker.core.MixedContent.accept(MixedContent.java:92)
    freemarker.core.Environment.visit(Environment.java:208)
    freemarker.core.Environment.process(Environment.java:188)
    freemarker.template.Template.process(Template.java:237)
    org.springframework.extensions.webscripts.processor.FTLTemplateProcessor.process(FTLTemplateProcessor.java:156)
    org.springframework.extensions.webscripts.AbstractWebScript.renderTemplate(AbstractWebScript.java:580)
    org.springframework.extensions.webscripts.DeclarativeWebScript.renderFormatTemplate(DeclarativeWebScript.java:263)
    org.springframework.extensions.webscripts.DeclarativeWebScript.execute(DeclarativeWebScript.java:143)
    org.springframework.extensions.webscripts.PresentationContainer.executeScript(PresentationContainer.java:69)
    org.springframework.extensions.webscripts.LocalWebScriptRuntimeContainer.executeScript(LocalWebScriptRuntimeContainer.java:203)
    org.springframework.extensions.webscripts.AbstractRuntime.executeScript(AbstractRuntime.java:333)
    org.springframework.extensions.webscripts.AbstractRuntime.executeScript(AbstractRuntime.java:189)

【问题讨论】:

  • 也许你应该在这里添加你的 bean 的代码。因为您在上面的示例中所做的是创建一个空 bean 并将其放入会话中。 Freemarker 不喜欢空值,所以它退出了。
  • 不,我也为 bean 设置了一个值。它不是一个空豆。还创建了 setter 和 getter。我已经编辑了我的代码。请看一看。

标签: java spring alfresco freemarker alfresco-share


【解决方案1】:

如果您的 MyBean 没有 getName() 方法,则 ${bean.name} 未定义

【讨论】:

  • name 属性有 setter 和 getter。我已经编辑了我的代码。请看一下。仍然是未定义的错误。
  • 您需要显式地公开会话属性。这在 spring 的 freemarker 视图解析器中不是标准的。请参阅下面的答案。
【解决方案2】:

请在您的 spring beans.xml 中将以下属性添加到您的 freemarker 视图解析器

<property name="exposeSessionAttributes">
    <value>true</value>
</property>

然后再试一次。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多