freemarker 可以使用jsp标签,但只有你用了他的 freemarkerservlet,这个功能才能有效。如果你想生成静态文件那么这样就不行了
使用jsp标签的方法 使用心得
<#global hm=JspTaglibs["/WEB-INF/struts-html.tld"]>
<@hm.form action="logon.do" method="post">
<input name="username" type="text" />
<input name="password" type="password"/>
<input type="submit" name="submit"></button>
</@hm.form>
<@include_page path= "/error.jsp"/>
可以这样来支持jsp标签
也可以支持jsp:include 这个标签
其本质是在model中添加了 对jsptaglibs和tabinclude 的标记
这是 freemarkerservlet 中 对templateModel的初始化 从以下红色代码可以看出,想要自己处理jsptaglibs 而不去调用它的servlet 只需要在自己的model中添加上这个值对就可以了,应用环境 servlet
需
要注意的一个问题 使用include这个标签是
由于传入的是request和response这两个参数,include来的内容会写入到response中,而不是自己指定的out中,所以这部分可
能需要进行一些修改,如果只是其用来做表示层 那么很容易(本来就是这么做的)
protected TemplateModel createModel(ObjectWrapper wrapper,
ServletContext servletContext,
final HttpServletRequest request,
final HttpServletResponse response) throws TemplateModelException {
try {
AllHttpScopesHashModel params = new AllHttpScopesHashModel(wrapper, servletContext, request);
// Create hash model wrapper for servlet context (the application)
ServletContextHashModel servletContextModel =
(ServletContextHashModel) servletContext.getAttribute(
ATTR_APPLICATION_MODEL);
if (servletContextModel == null)
{
servletContextModel = new ServletContextHashModel(this, wrapper);
servletContext.setAttribute(
ATTR_APPLICATION_MODEL,
servletContextModel);
TaglibFactory taglibs = new TaglibFactory(servletContext);
servletContext.setAttribute(
ATTR_JSP_TAGLIBS_MODEL,
taglibs);
initializeServletContext(request, response);
}
params.putUnlistedModel(KEY_APPLICATION, servletContextModel);
params.putUnlistedModel(KEY_APPLICATION_PRIVATE, servletContextModel);
params.putUnlistedModel(KEY_JSP_TAGLIBS, (TemplateModel)servletContext.getAttribute(ATTR_JSP_TAGLIBS_MODEL));
// Create hash model wrapper for session
HttpSessionHashModel sessionModel;
HttpSession session = request.getSession(false);
if(session != null) {
sessionModel = (HttpSessionHashModel) session.getAttribute(ATTR_SESSION_MODEL);
if (sessionModel == null || sessionModel.isZombie()) {
sessionModel = new HttpSessionHashModel(session, wrapper);
session.setAttribute(ATTR_SESSION_MODEL, sessionModel);
if(!sessionModel.isZombie()) {
initializeSession(request, response);
}
}
}
else {
sessionModel = new HttpSessionHashModel(this, request, response, wrapper);
}
params.putUnlistedModel(KEY_SESSION, sessionModel);
// Create hash model wrapper for request
HttpRequestHashModel requestModel =
(HttpRequestHashModel) request.getAttribute(ATTR_REQUEST_MODEL);
if (requestModel == null || requestModel.getRequest() != request)
{
requestModel = new HttpRequestHashModel(request, response, wrapper);
request.setAttribute(ATTR_REQUEST_MODEL, requestModel);
request.setAttribute(
ATTR_REQUEST_PARAMETERS_MODEL,
createRequestParametersHashModel(request));
}
params.putUnlistedModel(KEY_REQUEST, requestModel);
params.putUnlistedModel(KEY_INCLUDE, new IncludePage(request, response));
params.putUnlistedModel(KEY_REQUEST_PRIVATE, requestModel);
// Create hash model wrapper for request parameters
HttpRequestParametersHashModel requestParametersModel =
(HttpRequestParametersHashModel) request.getAttribute(
ATTR_REQUEST_PARAMETERS_MODEL);
params.putUnlistedModel(KEY_REQUEST_PARAMETERS, requestParametersModel);
return params;
} catch (ServletException e) {
throw new TemplateModelException(e);
} catch (IOException e) {
throw new TemplateModelException(e);
}
}
分享到:
相关推荐
需要注意的是,FreeMarker模板中的Struts2标签使用`<@s.tagname>`,而在JSP中则是`<s:tagname>`。此外,如果遇到中文乱码问题,可以在Struts2的配置文件(如`struts.xml`)中设置字符编码: ```xml ``` 总的来说...
2. **Struts2 JSP标签库**:`<s:form>`、`<s:textfield>`、`<s:submit>`等标签的使用,以及如何通过`<s:property>`标签显示数据。 3. **JSP和Freemarker的比较**:两者在代码组织、可维护性和开发效率上的差异。 4. ...
4. **JSP Ext增强**:JSP Ext库提供了一些额外的JSP标签,可以增强JSP的功能,比如方便的数据绑定、更灵活的条件语句等。在整合项目中,JSP Ext可以帮助简化JSP页面的编写,提高可读性和维护性。 5. **后端控制**:...
对于页面导入或包含,Freemarker使用`<#include>`标签,这与JSP的`<%@ include %>`非常相似。这种变化使得页面结构更加清晰,同时也提高了代码的复用性。 #### 绑定数据 **JSP:** ```jsp ${vo.title} ``` **...
接下来,在`web.xml`中,你需要配置一个名为`JSPSupportServlet`的servlet,这个servlet是Struts2用来支持JSP标签的。这样做是为了确保Struts2在服务器启动时能优先加载这个servlet,以便支持FreeMarker模板中使用...
Freemarker支持条件判断、循环结构、内置函数,以及自定义标签,增强了模板的灵活性。与JSP相比,Freemarker通常被认为更简洁、易读且更易于维护。 将这三个框架结合使用,可以构建出高效、灵活的Java Web应用。...
Struts2、JSTL、Spring、JavaScript(JS)以及JSP标签是Java Web开发中的核心组件,它们各自承担着不同的职责,共同构建了强大的Web应用程序。以下是对这些技术的详细解释: 1. **Struts2**:Struts2是一个基于MVC...
4. 为Web准备:内置处理Web相关任务的结构,如HTML转义,可与Model2 Web应用框架集成,如Struts,作为JSP的替代品,支持JSP标签库,实现MVC模式下的可视化设计与应用程序逻辑分离。 5. 国际化和本地化支持:包括字符...
为了缓解这一问题,可以通过使用Freemarker将JSP生成的动态页面转换为静态HTML文件,从而提高系统性能和响应速度。 #### 三、Freemarker与JSP生成HTML的区别 1. **JSP**:是一种基于Java的服务器端脚本技术,用于...
当前java web开发的主流已是spring boot,但还有很多老项目是基于spring web以及jsp...此工具使用python解析jsp文件并把Jsp标准标签解析为freemarker模板语言,以协助开发者把spring web项目转换为spring boot项目。
虽然Freemarker不使用JSP,但它提供了类似于JSP标签的功能,称为“指令”(Directives)。这些指令可以用来控制流程、包含其他模板、循环、条件判断等,为开发者提供了一种灵活的方式来构建复杂的页面结构。 4. **...
1. 在FreeMarker模板中使用Shiro标签库:在.ftl文件顶部引入Shiro标签库: ```html ${'@org.apache.shiro.web.tags.ShiroTagLibHandler@getTagLibUri()'}"> ${shiro}" as shiro/> ``` 2. 使用Shiro标签:在模板中...
ShiroTags 是 Shiro 提供的一套用于模板引擎的标签库,如 Freemarker 和 JSP,它们使得在视图层集成权限控制变得更为便捷。 `com.jagregory.shiro.freemarker.ShiroTags` 是 Jagregory 开发的一个扩展,将 Apache ...
- **支持JSP标记库**: 允许在模板中使用JSP标签。 - **国际化和本地化**: - **字符集智能处理**: 内部使用Unicode字符集,支持多种字符集。 - **本地化敏感**: 数字、日期和时间格式都支持本地化处理。 - **多...
4. 国际化支持:通过使用`<#t>`标签,FreeMarker可以轻松实现多语言环境下的文本处理。 三、FreeMarker的常用语法 1. 输出表达式:`${expression}`,用于输出数据模型中的值。 2. 条件语句:`<#if>...<#else>......
- 将struts-tags.tld复制到工程的WEB-INF目录下,这将使Struts2的标签能在JSP或Freemarker模板中使用。 - 配置web.xml,添加Struts2的过滤器和过滤器映射,确保所有请求都经过Struts2处理。同时,为在Freemarker中...
Freemaker是一个”模板引擎”,也可以说是一个基于模板技术的生成文本输出的一个通用工具.它是一个JAVA的包,一个JAVA程序员可以使用的类库....注意,它是MVC框架的一个组件(如STRUTS),也可以在模板中使用JSP标签.
**注意**:为了让Freemarker能识别并使用Struts2提供的标签,需要在`web.xml`中配置相应的过滤器。 - **Struts.xml配置**:定义不同业务场景的结果视图。 ```xml <result name="success" type="freemarker">/...