当前位置: 首页 > news >正文

网站的推广代码是什么企业网站规划案例

网站的推广代码是什么,企业网站规划案例,wordpress添加签名,中视频自媒体平台在使用JSP / JSTL和Apache Tiles几年之后#xff0c;我开始为我的Spring MVC应用程序发现Thymeleaf。 Thymeleaf是一个非常出色的视图引擎#xff0c;尽管目前缺乏良好的IntelliJ#xff08;投票#xff1a;http: //youtrack.jetbrains.com/issue/IDEABKL-6713 #xff09… 在使用JSP / JSTL和Apache Tiles几年之后我开始为我的Spring MVC应用程序发现Thymeleaf。 Thymeleaf是一个非常出色的视图引擎尽管目前缺乏良好的IntelliJ投票http: //youtrack.jetbrains.com/issue/IDEABKL-6713 支持但它简化并加快了开发速度有Eclipse插件 。 在学习如何使用Thymeleaf的同时我研究了使用布局的不同可能性。 除了本机片段包含机制之外 还至少有两个选项可用于布局 Thymeleaf与Apache Tile的集成以及Thymeleaf Layout Dialect 。 两者似乎都可以正常工作但是受关于简单和自定义选项的评论的启发我尝试了一下。 在这篇文章中我将展示我创建了解决方案。 创建具有Thymeleaf支持的Spring MVC项目 为了快速入门我在Thymeleaf 2.1支持下使用了Spring MVC原型 。 我通过简单地调用原型创建了一个项目然后将其导入到IntellJ中。 创建布局文件 在WEB-INF / views目录中我创建了一个布局文件夹在其中放置了第一个名为default.html的布局文件$ {view}变量将包含Controller返回的视图名称和$ {view}中的内容片段文件将放置在这里。 创建视图文件 我编辑了WEB-INF / views / homeNotSignedIn.html并按如下方式定义了内容片段因此唯一的更改是定义名为content的片段并删除重复的片段包含。 无需其他更改。 Controller返回原始视图名称与之前一样 Controller class HomeController {RequestMapping(value /, method RequestMethod.GET)String index(Principal principal) {return principal ! null ? home/homeSignedIn : home/homeNotSignedIn;} } 我相应地改变了其他观点。 创建拦截器并与Spring MVC集成 为了完成“新布局框架”我创建了一个处理程序拦截器来完成工作 public class ThymeleafLayoutInterceptor extends HandlerInterceptorAdapter {private static final String DEFAULT_LAYOUT layouts/default;private static final String DEFAULT_VIEW_ATTRIBUTE_NAME view;Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {if (!modelAndView.hasView()) {return;}String originalViewName modelAndView.getViewName();modelAndView.setViewName(DEFAULT_LAYOUT);modelAndView.addObject(DEFAULT_VIEW_ATTRIBUTE_NAME, originalViewName);} } ThymeleafLayoutInterceptor获取从处理程序的方法返回的原始视图名称并将其替换为布局名称在WEB-INF / views / layouts / default.html中定义。 原始视图作为视图变量放置在模型中因此可以在布局文件中使用它。 我覆盖了postHandle方法因为它是在呈现视图之前执行的。 添加拦截器很容易 Configuration public class WebMvcConfig extends WebMvcConfigurationSupport {Overrideprotected void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new ThymeleafLayoutInterceptor());} } 这就是基本配置。 此后没有火箭。 转到localhost8080后的结果。 这是我所期望的。 奇迹般有效。 因此我尝试注册一个帐户以及提交表单后看到的内容 500 returned for /signup with message Error resolving template redirect:/, template might not exist or might not be accessible by any of the configured Template Resolvers 当然 重定向/提交表单后。 我需要像这样修改拦截器 public class ThymeleafLayoutInterceptor extends HandlerInterceptorAdapter {private static final String DEFAULT_LAYOUT layouts/default;private static final String DEFAULT_VIEW_ATTRIBUTE_NAME view;Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {if (!modelAndView.hasView()) {return;}String originalViewName modelAndView.getViewName();if (isRedirectOrForward(originalViewName)) {return;}modelAndView.setViewName(DEFAULT_LAYOUT);modelAndView.addObject(DEFAULT_VIEW_ATTRIBUTE_NAME, originalViewName);} private boolean isRedirectOrForward(String viewName) {return viewName.startsWith(redirect:) || viewName.startsWith(forward:);} } 它按预期工作。 但是我意识到我需要定义和附加布局因为Signup和Signin之前而不是在应用上述更改之后使用了此布局。 创建其他布局 我创建了一个名为blank.html的新布局并将其放置到WEB-INF / views / layouts文件夹中。 但是如何使用选择布局 可能有很多方法可以做到这一点。 我最简单的方法之一就是通过简单地添加一个名为layout的模型属性来从Controller返回布局名称。 如果未给出布局则使用默认布局否则使用给定布局。 简单。 但是我想要一个更强大的解决方案。 所以我想也许我可以这样使用注释 Controller class SigninController {Layout(value layouts/blank)RequestMapping(value signin)String signin() {return signin/signin;} } 对我来说这听起来像是一个很好的解决方案。 所以我实现了它。 选择布局 我创建了一个方法级别Layout批注并将其放置在org.thymeleaf.spring.support包中与ThymeleafLayoutInterceptor一起 package org.thymeleaf.spring.support;import java.lang.annotation.*;Target(ElementType.METHOD) Retention(RetentionPolicy.RUNTIME) Documented public interface Layout {String value() default ; } 我将拦截器更改如下 public class ThymeleafLayoutInterceptor extends HandlerInterceptorAdapter {private static final String DEFAULT_LAYOUT layouts/default;private static final String DEFAULT_VIEW_ATTRIBUTE_NAME view;Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {if (!modelAndView.hasView()) {return;}String originalViewName modelAndView.getViewName();if (isRedirectOrForward(originalViewName)) {return;}String layoutName getLayoutName(handler);modelAndView.setViewName(layoutName);modelAndView.addObject(DEFAULT_VIEW_ATTRIBUTE_NAME, originalViewName);}private boolean isRedirectOrForward(String viewName) {return viewName.startsWith(redirect:) || viewName.startsWith(forward:);}private String getLayoutName(Object handler) {HandlerMethod handlerMethod (HandlerMethod) handler;Layout layout handlerMethod.getMethodAnnotation(Layout.class);if (layout null) {return DEFAULT_LAYOUT;} else {return layout.value();}} } 现在当使用Layout注释对处理程序方法进行注释时它将获得其value属性。 效果很好。 但是当我开始更改SignupController时我意识到我需要注释这两种方法。 如果可以通过对Controller类进行注释将我的注释一次用于所有方法那就更好了 Controller Layout(value layouts/blank) class SignupController {} 所以我做了。 最后的修饰 首先我更改了注释以便可以将其定位为类型级别 Target({ElementType.METHOD, ElementType.TYPE}) Retention(RetentionPolicy.RUNTIME) Documented public interface Layout {String value() default ; } 和拦截器 public class ThymeleafLayoutInterceptor extends HandlerInterceptorAdapter {private static final String DEFAULT_LAYOUT layouts/default;private static final String DEFAULT_VIEW_ATTRIBUTE_NAME view;private String defaultLayout DEFAULT_LAYOUT;private String viewAttributeName DEFAULT_VIEW_ATTRIBUTE_NAME;public void setDefaultLayout(String defaultLayout) {Assert.hasLength(defaultLayout);this.defaultLayout defaultLayout;}public void setViewAttributeName(String viewAttributeName) {Assert.hasLength(defaultLayout);this.viewAttributeName viewAttributeName;}Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {if (!modelAndView.hasView()) {return;}String originalViewName modelAndView.getViewName();if (isRedirectOrForward(originalViewName)) {return;}String layoutName getLayoutName(handler);modelAndView.setViewName(layoutName);modelAndView.addObject(this.viewAttributeName, originalViewName);}private boolean isRedirectOrForward(String viewName) {return viewName.startsWith(redirect:) || viewName.startsWith(forward:);}private String getLayoutName(Object handler) {HandlerMethod handlerMethod (HandlerMethod) handler;Layout layout getMethodOrTypeAnnotation(handlerMethod);if (layout null) {return this.defaultLayout;} else {return layout.value();}}private Layout getMethodOrTypeAnnotation(HandlerMethod handlerMethod) {Layout layout handlerMethod.getMethodAnnotation(Layout.class);if (layout null) {return handlerMethod.getBeanType().getAnnotation(Layout.class);}return layout;} } 如您所见方法级别注释比类型级别注释更重要这提供了一定的灵活性。 此外我还添加了配置拦截器的可能性。 我认为设置默认布局名称和视图属性名称可能会很有用。 摘要 提出的解决方案可能需要一些改进才能在生产中使用但是它显示了我们可以简单地构建模板布局而无需在项目中添加额外的库并仅利用Thymeleaf的核心功能。 请分享您对解决方案的评论和意见。 请在GitHub上找到源代码 https : //github.com/kolorobot/thymeleaf-custom-layout 参考 Spring MVC应用程序中的Thymeleaf模板布局在Codeleak.pl博客上没有 JCG合作伙伴 Rafal Borowiec的扩展 。 翻译自: https://www.javacodegeeks.com/2013/11/thymeleaf-template-layouts-in-spring-mvc-application-with-no-extensions.html
http://www.zqtcl.cn/news/111340/

相关文章:

  • 上门做美容的有什么网站微信网页版本
  • 专门做餐饮运营的网站网站开发相关知识
  • 石家庄门户网站建设免费简历模板的网站
  • 微网站建设市场如何做好平台推广
  • 网站不备案做优化小程序开发前景怎么样
  • 美丽说网站优化百度关键词优化
  • 同性男做的视频网站赶集网招聘最新招聘附近找工作
  • 做挖机配件销售的网站oa办公系统软件哪家好
  • 聊城设计网站商务网站的特点
  • 厦门做个网站多少钱工程建设范围
  • 百度推广官方网站在哪里制作网页
  • 济南集团网站建设方案沈阳手机网站制作
  • 网站备案号注销的结果做网站的外包能学到什么
  • 在线购物网站开发项目网站建设电话推广话术
  • 网站主体信息太原站扩建
  • 西平县住房和城乡建设局网站空间商网站
  • p2p网站建设cms一键生成图片
  • 甘肃省第八建设集团公司网站能够做物理题的网站
  • 团购网站建设方案建筑工程网校官网
  • 佛山建站网站模板小公司管理方法
  • 常德住房和城乡建设局网站做风险代理案源的网站
  • 手机网站开发人员选项wordpress加载媒体库
  • 做钓鱼网站用哪种编程语言张家界有实力seo优化费用
  • 如何做一个主题网站做网站必须有框架么
  • 建设网站需要什么知识上海高端网页设计
  • 电子商务网站建设基本流程公司网站建设平台
  • 域名没过期 网站打不开怎么办素马设计顾问讲解价格
  • 怎么做非法彩票网站贵州网站开发哪家便宜
  • 青岛市医疗保险网站wordpress七牛云
  • 哪个浏览器可以做网站查询网站的外链