有没有办法在FreeMarker模板中更改哈希或容器中的子变量?例如,假设我有:
{"name":"Bob", "city":"Detroit", "state":"OH"}
Run Code Online (Sandbox Code Playgroud)
我想把状态改为"MI".我该怎么做呢?我知道assign标签,但文档说"请注意,只能创建/替换顶级变量".我不确定这是否意味着不能用assign标签替换子变量,或者不能用任何方法替换子变量.
我试图测试一个字符串是否可以转换为FreeMarker中的数字.例如,可以转换"123"和"3.14",但"foo"不能.我知道我可以通过对字符串使用数字方法(例如"123"?number)并查看它是否产生错误来测试这一点,但我正在寻找一种方法来测试它而不会导致错误.
我尝试过?matches("^\d+$"),它对整数工作正常,但我正在寻找适用于所有数字的东西.
我可以使用更复杂的正则表达式来做到这一点,但我想知道是否有更简单的方法.
我可以使用freemarker模板中的smooks显示我传入的XML文件的内容,但我想添加本地系统的当前日期和时间来识别我的程序的执行情况.
<ftl:freemarker applyOnElement="CreditCard">
<ftl:template><!-- <BalanceInquiryRequest>
<TransactionId>${BalanceInquiryRequest.TransactionId}</<TransactionId>
<ConfigurationId>${BalanceInquiryRequest.ConfigurationId}</ConfigurationId>
<CardNumberr>${.vars["GiftCard"].CardNumber}</CardNumberr>
<ExpirationDate>${.vars["GiftCard"].ExpirationDate}</ExpirationDate>
<SecurityCode>${.vars["GiftCard"].SecurityCode}</SecurityCode>
*****************************
Here I want to display the current Date & time
</BalanceInquiryRequest>
--></ftl:template>
</ftl:freemarker>
Run Code Online (Sandbox Code Playgroud)
你能告诉我如何在XML中添加当前日期和时间而不在传入的XML中输入条目.
在我的控制器中,我设置了模型并按如下方式进行查看:
ModelAndView mav = new ModelAndView();
mav.setView("index");
mav.addObject("user", user);
mav.addObject("someCollection", someCollection);
return mav;
Run Code Online (Sandbox Code Playgroud)
现在,我想创建一个将使用someCollection和user对象作为参数的辅助类型对象。
我的辅助函数将输出一些HTML等,这可能吗?
我有一个java.lang.Iterable(实际上是一个com.google.gson.JsonArray实例).
我想使用freemarker(2.3.16)枚举列表中的项目.
[#assign sports = controller.sports]
[#-- At this point, sports is bound to a com.google.gson.JsonArray instance. --]
[#list sports as sport]
${sport_index}
[/#list]
Run Code Online (Sandbox Code Playgroud)
我想避免编写自定义bean和Gson反序列化器只是为了拥有一个明确的项集合.使用Gson(已经将JSON字符串反序列化为JsonObject)然后从JsonObject创建我自己的DAG对象对我来说似乎很浪费.
不幸的是,我还没有找到一种让Freemarker将java.lang.Iterable视为列表的方法.我明白了:
freemarker.template.TemplateException : Expected collection or sequence.
controller.sports evaluated instead to freemarker.ext.beans.XMLStringModel on line 8, column 16 in sports.html.
freemarker.core.TemplateObject.invalidTypeException(line:135)
freemarker.core.IteratorBlock$Context.runLoop(line:190)
freemarker.core.Environment.visit(line:417)
freemarker.core.IteratorBlock.accept(line:102)
freemarker.core.Environment.visit(line:210)
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个非常简单的FreeMarker和Spring集成.但是,当我运行我的示例时,我得到一个例外:
GRAVE: Servlet.service() for servlet MyServlet threw exception
javax.servlet.ServletException: Could not resolve view with name 'Home' in servlet with name 'MyServlet'
at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1162)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:950)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:662)
Run Code Online (Sandbox Code Playgroud)
我不知道配置有什么问题:
web.xml中
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<context-param>
<param-name>contextClass</param-name>
<param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
</context-param>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>com.jverstry.Configuration</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> …Run Code Online (Sandbox Code Playgroud) 我正在使用freemarker并试图以这种格式显示数字:$3,343,434.00例如.这很容易通过使用${total?string.currency}(假设"总数"是一些数字)来处理.
但是,当我有负数时,它会像这样显示:($343.34)而不是:-$343.34.我需要负号而不是括号.有没有办法我可以自定义格式,以便它做的所有事情,string.currency但取代负值行为?我对freemarker相对较新,所以我们非常感谢您的详细回复!
有没有一种简单的方法来去除换行符但不压缩空格?
该<@compress>指令兼具两者,这不是我想要的。
我在这样的循环中有一个部分:
<#list items as item>
* <#if something>${something?right_pad(10)}<#else>${something_else?right_pad(10)}</#if><#if another_thing>${more_data?right_pad(20)}<#else>${even_more_data?right_pad(20)}</#if>
</#list>
Run Code Online (Sandbox Code Playgroud)
这使得一些非常长的线路,我非常喜欢做这样的事情:
<#list items as item>
* <#if something>
${something?right_pad(10)}
<#else>
${something_else?right_pad(10)}
</#if>
<#if another_thing>
${more_data?right_pad(20)}
<#else>
${even_more_data?right_pad(20)}
</#if>
</#list>
Run Code Online (Sandbox Code Playgroud)
但似乎没有一种简单的方法可以消除此处为清晰起见给出的间距的歧义,我想使用right_pad.
有没有办法如何转储整个对象并将其写在某个地方?
像:
var_dump()在 php
console.log中的 JS
我找到了类似的东西list,所以我在下面尝试了类似的东西:
<#list calculation as c>
${c}
</#list>
Run Code Online (Sandbox Code Playgroud)
但是模板会出错。我appriciate任何建议!
我想创建几个 .ftl 文件类型,但 Intellij 无法识别这种类型,我什至无法打开它。这些文件没有类型,只有问号。