当前位置:首页 » 网页前端 » freemarkerweb例子
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

freemarkerweb例子

发布时间: 2022-11-21 22:31:24

A. Freemarker中<#if (A) && A == 0>判断怎么解释

这句话意思是:

A?? 判断A是不是存在,A==0 判断 A是否等于0。

B. 请教FreeMarker在java web开发中使用方法

sysUserList 从action传过来
<#list sysUserList as item>
${item.name}
<#if item.sex=='MAN'>男</#if>
<#if item.sex=='WOMAN'>女</#if>
</#list>

C. 什么是FreeMarker

它是一个Java package,面向Java程序员的class library。它本身并不是针对最终用户的应用,而是允许程序员将其嵌入到他们的产品中。 FreeMarker被设计用来生成HTML Web页面,特别是基于MVC(Model View Controller)模式的应用程序。使用 MVC 模式作为动态的WEB页面的想法,是为了分隔页面设计者 (HTML 设计者) 和程序员。.每个人做自己擅长的那一部分。设计者可以不通过程序员的改变或修改代码来改变网页的样子,因为应用逻辑(Java程序)和页面设计(FreeMarker 模版)是分开的。模板不会被复杂繁琐的程序框架所 破坏。即使当一个项目的程序员和 HIMTL页面的制作者是同一个人时,这种分隔也是很有用,因为这样有助于保持应用的清晰并易于维护。 尽管FreeMarker有一些编程的能力,但它并不是一个象PHP那样的成熟的编程语言。与Java不同的是,Java程序准备用来显示的数据(如 sql queries) ,而Freemarker仅是生成文本页,这个文本页显示用于模板的预备数据。 FreeMarker不是一个Web应用框架,而更适合充当Web应用框架里的一个组件的角色,但FreeMarker引擎本身对HTTP或servlets并不关心,它仅仅是生成文本。在非Web应用环境中它同样能够展示完美的用途。然而值得注意的是:我们为使用FreeMarker提供了方便的解决方案,作为Model2框架(如Struts)的视图组件,你也可以在模版中使用JSP标签。 FreeMarker是免费的,有 BSD-style license Servlet运行于Java-enabled Web Server中。 Java Servlet 可以动态地扩展Server的能力,并采用请求-响应模式提供Web服务。 最早支持Servlet技术的是JavaSoft的Java Web Server 。此后,一些其它的基于Java的Web Server开始支持标准的

D. spring mvc freemarker 只能用request来传递数据吗

先附上一个SiteMesh3+FreeMarker+SpringMVC例子http://files.cnblogs.com/adaikiss/sitemesh3_freemarker_springmvc.zip

下载后解压,本地环境变量要有MAVEN,CMD进入工程目录直接运行mvn jetty:run

昨天花了一天时间来跟踪调试springmvc, freemarker, sitemesh3, 终于弄明白了大概的原理,最后解决了sitemesh中文(UTF-8)乱码,ftl装饰页不被渲染的问题。

sitemesh3是通过一个filter来对response进行拦截处理,在response提交之前,它会把response流里的数据备份起来,清空流,然后用request.getRequestDispatcher(装饰页URI).forward()来取得渲染后的装饰页,然后再把装饰页里的标签替换成之前备份的对应内容。

也就是说sitemesh不关心你的页面是如何生成的,它只是将两者拼接起来,不管你用的是JSP,Volocity, FreeMarker 还是 SpringMVC, Struts, wicket。

这样一来你就可以灵活地控制页面的生成方式。你可以把sitemesh3当成一个中间浏览器,他使用用户浏览器发送过来的request对象发送了两次(或以上)请求,第一次是原来的请求, 第二次是对装饰页面的请求,然后把这两个请求结果拼接起来返回给用户浏览器。

看到这里,装饰页如果是FTL就不被渲染的问题也就有了解决方法了。只要自己写一个过滤器对.ftl的请求用freemarker渲染一遍就可以了。由于我使用的是springmvc + freemarker,因此我直接拿springmvc来渲染FTL文件了,这样可以像被装饰页一样方便地使用spring的宏和其他一些对象。下面是我的filter

复制代码
public class FreemarkerFilter implements Filter {

private Locale locale;

@Override
public void init(FilterConfig filterConfig) throws ServletException {
String localeStr = filterConfig.getInitParameter("locale");
if(StringUtils.isNotBlank(localeStr)){
locale = new Locale(localeStr);
}else {
locale = Locale.getDefault();
}
}

@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
try {
HttpServletRequest req = (HttpServletRequest)request;
HttpServletResponse res = (HttpServletResponse)response;
String name = req.getRequestURI();
name = name.substring(1, name.lastIndexOf(".ftl"));
FreeMarkerViewResolver viewResolver = SpringContextHolder.getBean(FreeMarkerViewResolver.class);
View view = viewResolver.resolveViewName(name, locale);
@SuppressWarnings("unchecked")
Map<String, Object> model = (Map<String, Object>) request.getAttribute(ViewRendererServlet.MODEL_ATTRIBUTE);
view.render(null, req, res);
} catch (Exception e) {
throw new ServletException(e);
}
}

@Override
public void destroy() {
// TODO Auto-generated method stub

}

}
复制代码
在这里,我是把SpringMVC对被装饰页处理时生成的model传到了装饰页。装饰页和原来被include进来的页面差不多,一般装饰页可能不需要使用被装饰页中的model, 可以把SuppressWarnings注解下面那行注释掉,下面传null过去。

在web.xml里加上过滤器配置:

复制代码
<filter>
<filter-name>freemarkerFilter</filter-name>
<filter-class>org.adaikiss.kay.web.FreemarkerFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>freemarkerFilter</filter-name>
<url-pattern>*.ftl</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
复制代码

这样一来由sitemesh forward的请求就能被拦截并渲染。当然,你也可以把装饰页的后缀改成.des,url-pattern要同步改。

关于中文乱码的问题,在跟踪代码的时候发现对于没有contentType的view,SpringMVC会使用默认的contentType:AbstractTemplateView.DEFAULT_CONTENT_TYPE,即

"text/html;charset=ISO-8859-1",view 中可以设置这个属性,不过我的配置里没有定义view,还好ViewResolver里也可以设置,在springmvc配置文件里加上contentType属性即可。

<bean id="viewResolver"
class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="contentType" value="text/html; charset=UTF-8"/>

...

</bean>

E. 请教FreeMarker在java web开发中使用方法

在 Web应用中使用FreeMarker
在Web应用中使用FreeMarker跟在Java程序中使用并没有太大的区别. 下面是是一个在Web中使用的例子,用来生成HTML页面的模板文件内容如下:
<html>
<head>
<title>FreeMarker 的HelloWorld</title>
</head>
<body>
${message}
</body>
</html>
我们在Web应用中使用FreeMarker时,应该让Servlet来合并模板和数据,因此,Servlet负责创建Configuration实例,并负责合并模板和数据,下面是Servlet源代码:
package lee;
import java.util.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import freemarker.template.*;
public class HelloServlet extends HttpServlet
{
private Configuration cfg;
public void init()
{
//初始化FreeMarker配置
//创建一个Configuration实例
cfg = new Configuration();
//设置 FreeMarker的模版文件位置
cfg.(getServletContext(), "WEB-INF/templates");
}

public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
//建立数据模型
Map root = new HashMap();
root.put("message", "Hello FreeMarker!");
//取得模版文件
Template t = cfg.getTemplate("test.ftl");
// 开始准备生成输出
// - 使用模版文件的charset作为本页面的charset
// - 使用text/html MIME-type
response.setContentType("text/html; charset=" + t.getEncoding());
Writer out = response.getWriter();

//合并数据模型和模版,并将结果输出到out中
try
{
t.process(root, out);
}
catch (TemplateException e)
{
throw new ServletException("处理Template模版中出现错误", e);
}
}
}
可以看到这个Servlet类的代码与普通的Java程序中使用FreeMarker大致一样,区别有两个:1,设置FreeMarker加载模板的方法不一样,在Servlet中设置加载的方法是,第一个参数是本web应用的 ServletContext,第二个参数是模板文件的路径.;2,结果必须输出到HttpServletResponse中,才能被浏览器加载.
配置Servlet的web.xml文件中的代码如下:
<web-app>
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>lee.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>

F. javaweb 使用freemarker导出Excle,打开之后提示,格式与扩展名不符,点击“是”,依然可以打开

当然可以打开,扩展名只是用来提示系统选择什么软件打开文件并不会影响文件内容。要解决这个问题只要把下载的文件后缀名和模板后缀设置一致就行了

G. freemarker 加上数据后 其中的struts2标签中的 onchange等事件为什么就不显示了呢

该文件实质是一个控制器和视图的黏合剂,控制器之所以能够选择对应的视图,以及视图能够通过对应的控制器查询到模型中的数据都是依赖该文件.该文件是一个XML文件.在该配置文件中每Action都对应一个Action标签用来映射Action类的信息.
从软件的需求分析与设计谈起
实现一个完整的基于Struts的WEB应用
总结:
Java的Web应用中使用到的技术非常多,也相对比较复杂.因此开发中开发人员所负责的技术方面也会相对较多,所以我们必须考虑到个人的特长对开发工作进行合理分配,这就需要我们在软件的设计阶段考虑清楚.而MVC这种设计模式能够很好的把业务数据模型和业务处理模型独立出来,这样开发出独立的系统组件,以便于在开发视图阶段能够很好的保持数据的一致性.而在处理视图和模型之间的关系时控制器成为了两者的纽带,这样使得软件项目可以成为一个系统化的工程.
而Struts框架在Java的Web应用中就起到了这个作用.这样使得开发阶段能够很好的利用该框架完成开发项目,我们可以选择合适的模型组件如我们可以使用JavaBean技术来完成业务模型和数据模型的接口,而数据库则可以充当数据模型来保持业务阶段的持久状态.JSP和Struts为我们提供的一组标签这可以完成页面的表示和页面的逻辑等功能使得我们有了丰富的视图功能.并且Struts提供了ActionForm为视图可以和事件进行数据交换接口提供了良好的通道使得在处理Action事件时候可以通过ActionForm从视图中取得数据.而两者之间的桥梁就是Struts-config.xml文件该XML文件可以配置两者之间的联系.这使得接口之间有着极高的灵活性和伸缩性.而在Action中我们有可以调用和包含模型组件的功能.这样使得开发非常具有效率和可扩展能力.
Struts框架事实上已经被很多软件项目所应用,所以足见其适用性时非常可靠的.这里也希望通过该问的介绍能够使得读者对Struts框架有一个足够的了解.
参考资料:
精通Struts基于MVC的Java Web 设计与开发

H. 请教FreeMarker在java web开发中使用方法

很简单,引入jar包

然后在看你集成什么框架了,就需要配置什么文件,不难,网络上有各种配制方法。

I. webwork + freemarker做的网页,老是有缓存怎么办

关于Freemarket+webwork的编码问题‘提问’webwork+freemarker乱码的问题Webork2和FreeMarker中文乱编问题,求解!推荐群组:GT-Grid相关推荐Struts软件环境:tomcat4.0、webwork-2.1.6、freemarker-2.3、hibernate-2.1.7、spring-1.1.2、SQLserver2000配置文件:webwork.properties###.locale=zh_CNwebwork.i18n.encoding=GB2312*.ftl文件也没有加<metahttp-equiv="Content-Type"content="text/html;charset=gb2312">之类的代码错误提示信息:访问数据库没有问题,但数据库数据返回到freemarker的*.ftl页面就变成了“?”等乱码你的分析:刚接触webwork不久,测试的例子就是robbin的那个“SimpleDemo”的例子,只是数据源该成了sqlserver2000;最初是*.ftl的上的中文汉字都是乱码,后来论坛搜了搜,解决了,但数据库的数据依旧显示不正确;无奈只有在程序里面进行iso8859-1转gb2312码后页面才都显示正常;推荐链接Java开发新方式:专注UI,快速开发!

J. 如何在FreeMarker访问数据模型中对象属性

步骤如下:
①创建Configuration实例,该实例负责管理FreeMarker的模板加载路径,负责生成模板实例。
②使用Configuration实例来生成Template实例,同时需要指定使用的模板文件。
③填充数据模型,数据模型就是一个Map对象。
④调用Template实例的process方法完成合并。

根据上面步骤,下面提供一个使用FreeMarker创建输出的Java程序,该程序代码如下:
public class HelloFreeMarker
{
//负责管理FreeMarker模板文件的Configuration实例
private Configuration cfg;
//负责初始化Configuration实例的方法
public void init() throws Exception
{
//初始化FreeMarker配置
//创建一个Configuration实例
cfg = new Configuration();
//设置FreeMarker的模板文件位置
cfg.(new File("templates"));
}
//处理合并的方法
public void process() throws Exception
{
//创建数据模型
Map root = new HashMap();
root.put("name", "FreeMarker!");
root.put("msg", "您已经完成了第一个FreeMarker的实例!");
//使用Configuration实例来加载指定模板
Template t = cfg.getTemplate("test.flt");
//处理合并
t.process(root, new OutputStreamWriter(System.out));
}
public static void main(String[] args) throws Exception
{
HelloFreeMarker hf = new HelloFreeMarker();
hf.init();
hf.process();
}
}
上面代码创建了一个Map实例root,这个root将作为模板文件的数据模型,在该数据模型中存储了两个
key-value对,其中第一个是name,第二个是msg,这两个key都有对应的value,这两个value将会填充到模板中对应的插值处。
虽然FreeMarker可以在Java中使用,但大部分时候FreeMarker都用于生成HTML页面。

下面介绍在Web应用中使用FreeMarker,用Servlet来合并模板和数据模型,下面是Servlet应用中的代码:
public class HelloServlet extends HttpServlet
{
//负责管理FreeMarker模板文件的Configuration实例
private Configuration cfg;
//负责初始化Configuration实例的方法
public void init() throws Exception
{
//初始化FreeMarker配置
//创建一个Configuration实例
cfg = new Configuration();
//设置FreeMarker的模板文件位置
cfg.(getServletContext(), "WEB-INF/templates");
}
//生成用户响应
public void service(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException
{
//创建数据模型
Map root = new HashMap();
root.put("message", "Hello FreeMarker!");
//使用Configuration实例来加载指定模板,即:取得模板文件
Template t = cfg.getTemplate("test.flt");
//开始准备生成输出
//使用模板文件的charset作为本页面的charset
//使用text/html,MIME-type
response.setContentType("text/html; charset=" + t.getEncoding());
Writer out = response.getWriter();
//合并数据模型和模板,并将结果输出到out中
try
{
t.process(root, out);
}
catch(TemplateException e)
{
throw new ServletException("处理Template模板中出现的错误", e);
}
}
}