`
javamonkey
  • 浏览: 169464 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

最新 Beetl提供web-sample例子

阅读更多

从主网站上https://sourceforge.net/projects/beetl/files/ 下载,sample-web.war,部署在任意支持web的容器里,然后可以通过http://${your ip}:${your port}/${your context path}/index 来访问,如下样子

 

首先,通过 BeetlInitListener 初始化配置GroupTemplate,如下代码

 

public void contextInitialized(ServletContextEvent arg0) {
    	ServletGroupTemplate.intance().init(arg0.getServletContext());
    	ServletGroupTemplate.intance().getGroup().config("<!--:", "-->", "${", "}");
    	ServletGroupTemplate.intance().getGroup().setCharset("UTF-8");
    	ServletGroupTemplate.intance().getGroup().registerFormat("samples.xss", new XSSDefenseFormat());    	
    	ServletGroupTemplate.intance().getGroup().registerFunction("samples.join", new JoinFunction());
    	
    }
 

控制语句占位符号是<!--: ,这样,尽可能然模板少破坏原有文件,你可以通过浏览器直接浏览模板文件

另外注册了一个防止XSS攻击的格式化函数,在本实例中,如显示新闻内容${news.content,samples.xss}就可以了,XSSDefenseFormat会过滤带有javascript的输入。

JoinFunction是用于显示邮件发送者的函数,会将多个邮件发送者按照指定符号分开显示,在本示例中,用${samples.join(mail.from,",")}

 

页面布局上,采用layout标签函数。如首页,新闻页,以及帮助页都使用indexLayou.html页面(用户登录后,所有页面使用emailLayout.html页面),如下首页面

 

<!--: layout("/indexLayout.html",{"menuId":0,"title":"首页"}){-->
<div class="content">
<h1>说明</h1>
<p>这是一个简单示例,包括如何在web容器中使用Beetl,以及beetl的常用语法,函数展示。</p>
<h2>功能</h2>
<p>用户可以浏览新闻,以及帮助俩个栏目,注册用户可以登录系统收发邮件,用户名和密码为任意</p>
<h3>&nbsp;</h3>
<p>&nbsp;</p>
</div>
<!--:}-->

 

layout接收俩个参数,一个是此页面所使用的布局页面,第二个参数是需要传给布局页面的参数,是一个json格式,本例子中,首页使用的是indexLayout.html页面,并且会传递title参数。

 

indexLayout.html 由三部分构成,一部分是在页头通过includeFileTemplate包括inc/indexMenu.html,页尾通过 includeFiletemplate包括footer.html. 中间部分用占位符${layoutContent}将主页面内容赋值到这个地方。整个页面样子如下:

 

<div class="container">
<div class="header">
<p><a href="#"><img src="images/logo.jpeg" alt="在此处插入徽标" name="Insert_logo" width="158" height="124" id="Insert_logo" style="background: #8090AB; display:block;" /></a></p>
<!--: includeFileTemplate("/inc/indexMenu.html"){ -->
这是菜单,参考inc/indexMenu.html
<!--:} -->


<!-- end .header --></div>
${layoutContent}

<!--: includeFileTemplate("/footer.html"){ -->
<div class="footer">
<p align="center">beetl版权所有 闲.大赋</p>
<!-- end .footer --></div>
<!-- end .container --></div>
<!--:} -->
</body>
</html>

 

注意,之所以“这是菜单,参考inc/indexMenu.html”是可以不用的,正如footer里的页面,放在这儿,使得模板页面易读,容易维护,includeFileTemplate将不处理{} 里的内容

 

更多详情,还是下载web看看吧

 

 

 

如果启用预编译功能,可以看到如下class在运行的时候被生成

 

 


欢迎访问 http://beetl.sourceforge.net/,欢迎加入beetl群 219324263

 

  • 大小: 23.6 KB
  • 大小: 5.3 KB
  • 大小: 50 KB
分享到:
评论
6 楼 chenlei65368 2012-05-18  
我还是加入beetl群吧
5 楼 chenlei65368 2012-05-18  
javamonkey 写道
chenlei65368 写道
javamonkey 写道
chenlei65368 写道
正好看了这个例子,内置函数还是少了,如果写自定义函数的话,感觉有点麻烦了。
比如字符串截取,字符串长度,字符串大小写转换等,要实现类似jstl函数标签的功能,一个方法就要写一个类实现Function,这个类的数量就有点多了。


恩,内置函数确实少,关于字符,时间,数组(集合)操作的,在模板里很常用,但目前还没有提供。目前手头还有些预编译优化bug,这个改完了,会陆续提供一些比较核心的扩展函数。

期待你的更新


我再你的博客里回复了一下 如何较为方便的增加更多函数的帖子,你看一下。

另外预编译最近发现了好俩个个bug,正在修复,如果影响你的开发,请先切换到非优化模式。

是的,目前是切换到非优化模式的
4 楼 javamonkey 2012-05-18  
chenlei65368 写道
javamonkey 写道
chenlei65368 写道
正好看了这个例子,内置函数还是少了,如果写自定义函数的话,感觉有点麻烦了。
比如字符串截取,字符串长度,字符串大小写转换等,要实现类似jstl函数标签的功能,一个方法就要写一个类实现Function,这个类的数量就有点多了。


恩,内置函数确实少,关于字符,时间,数组(集合)操作的,在模板里很常用,但目前还没有提供。目前手头还有些预编译优化bug,这个改完了,会陆续提供一些比较核心的扩展函数。

期待你的更新


我再你的博客里回复了一下 如何较为方便的增加更多函数的帖子,你看一下。

另外预编译最近发现了好俩个个bug,正在修复,如果影响你的开发,请先切换到非优化模式。
3 楼 chenlei65368 2012-05-08  
javamonkey 写道
chenlei65368 写道
正好看了这个例子,内置函数还是少了,如果写自定义函数的话,感觉有点麻烦了。
比如字符串截取,字符串长度,字符串大小写转换等,要实现类似jstl函数标签的功能,一个方法就要写一个类实现Function,这个类的数量就有点多了。


恩,内置函数确实少,关于字符,时间,数组(集合)操作的,在模板里很常用,但目前还没有提供。目前手头还有些预编译优化bug,这个改完了,会陆续提供一些比较核心的扩展函数。

期待你的更新
2 楼 javamonkey 2012-05-08  
chenlei65368 写道
正好看了这个例子,内置函数还是少了,如果写自定义函数的话,感觉有点麻烦了。
比如字符串截取,字符串长度,字符串大小写转换等,要实现类似jstl函数标签的功能,一个方法就要写一个类实现Function,这个类的数量就有点多了。


恩,内置函数确实少,关于字符,时间,数组(集合)操作的,在模板里很常用,但目前还没有提供。目前手头还有些预编译优化bug,这个改完了,会陆续提供一些比较核心的扩展函数。
1 楼 chenlei65368 2012-05-07  
正好看了这个例子,内置函数还是少了,如果写自定义函数的话,感觉有点麻烦了。
比如字符串截取,字符串长度,字符串大小写转换等,要实现类似jstl函数标签的功能,一个方法就要写一个类实现Function,这个类的数量就有点多了。

相关推荐

    salem-sample-data.zip

    总的来说,"salem-sample-data.zip"提供了宝贵的教育资源,有助于研究人员和学生加深对数据处理流程的理解,提升数据分析技能,并可能推动新的见解和发现。无论是对于学术研究还是实际业务问题,高质量的数据集都是...

    bevformer转onnx自己电脑失败,由于grid-sample算子不支持

    标题中的“bevformer转onnx自己电脑失败,由于grid-sample算子不支持”提示了我们在尝试将一个名为“BEVFormer”的模型转换为ONNX格式时遇到了问题。BEVFormer可能是一个用于自动驾驶或者计算机视觉任务的深度学习...

    zoom-websdk-sample-vue2:一个示例应用程序,演示如何在Vue 2中使用Zoom WebSDK

    导航到websdk-sample-vuejs目录: cd websdk-sample-vuejs 安装依赖项: yarn install 在代码编辑器中打开websdk-sample-vuejs目录 打开文件,然后输入变量的值: 多变的 描述 签名端点 必需,返回签名的端点...

    config-sample.plist

    配置文件config-sample.plist config-sample.plist config-sample.plist

    springboot-web-sample

    在"springboot-web-sample"这个项目中,我们看到的是一个基于Gradle构建的Web应用程序示例,它为学习和理解Spring Boot的核心特性和实践提供了很好的平台。 【Spring Boot基础知识】 1. **自动配置**:Spring Boot...

    ASPNET-WebAPI-Sample-master.zip

    此“ASPNET-WebAPI-Sample-master.zip”压缩包可能包含了关于如何使用ASP.NET Web API创建和操作RESTful服务的示例代码和教程。 在ASP.NET Web API中,开发者可以利用C#或VB.NET等.NET Framework语言,通过定义控制...

    aes-sample.zip_AES_aes-sample_mp4 sample-aes_sample aes

    "mp4_sample-aes"暗示了AES可能被应用于MP4多媒体文件的加密,这是在数字媒体和流媒体领域常见的做法,用于保护版权内容。"sample_aes"可能是一个测试用例或者演示程序,用来展示如何在实际应用中使用AES加密。 ...

    jcaptcha-sample_验证码生成

    4. **Web 应用集成**:在 Spring MVC 或其他 Web 框架中,你可以将 `jCaptcha` 集成到控制器中,处理验证码的生成和验证。这通常涉及到在请求处理方法中生成验证码,在表单提交时验证验证码。 5. **安全存储与清理*...

    spring-boot-web-sample

    在压缩包子文件的文件名称列表中,"spring-boot-web-sample-master"可能代表了项目的源代码仓库的主分支,这通常包含了项目的全部源代码、配置文件、测试和其他资源。 在Spring Boot 2.0的Web应用中,我们可以预期...

    unity无限跑酷源码Endless Runner - Sample Game 1.1

    unity无限跑酷源码Endless Runner - Sample Game 1.1 Requires Unity 5.6.1 or higher. This endless runner game example (Trash Dash) is optimised for mobile, it shows the use of ob ject pooling, origin ...

    AISHELL-1-sample数据集

    总的来说,AISHELL-1-sample数据集结合Kaldi工具包,为研究者和开发者提供了研究中文语音识别的理想平台。通过处理和分析这个数据集,不仅可以提升模型的识别性能,还能深入理解语音识别技术的各个环节,包括数据...

    vuforia-web-services-sample-code-java-2-0-0.zip_The Web_Vuforia_

    在本案例中,我们关注的是 "Vuforia Web Services Sample Code Java 2.0.0",这是一个针对 Vuforia 平台的 web 服务示例代码库,专门针对 Java 开发者设计。 **Vuforia Web Services** 是 Vuforia 平台的一部分,...

    Android-WiFi-Connection-Demo-Code-Sample-master.zip

    Android-WiFi-Connection-Demo-Code-Sample-master.zipAndroid-WiFi-Connection-Demo-Code-Sample-master.zipAndroid-WiFi-Connection-Demo-Code-Sample-master.zipAndroid-WiFi-Connection-Demo-Code-Sample-master...

    Android aidl-sample.zip

    总结,"aidl-sample.zip"压缩包提供的示例将帮助开发者深入了解AIDL的工作原理,以及如何在Android应用中实现进程间通信。通过学习和实践这个示例,开发者可以更好地掌握Android系统级别的服务交互和数据传递。

    Endless Runner - Sample Game.unitypackage

    Endless Runner - Sample Game.unitypackage

    webviewer-svelte-sample:演示将 WebViewer 集成到 Svelte 的示例

    它提供了一个灵活的、开箱即用的响应式 UI,可与核心库交互以查看、注释和操作可嵌入任何 Web 项目的 PDF。 此存储库专为有兴趣将 WebViewer 集成到项目中的任何用户设计。 该项目是使用模板生成的。 演示 您可以...

    axis-sample1.4.rar

    总之,"axis-sample1.4.rar" 提供了使用Axis 1.4框架开发和测试SOAP Web服务所需的所有资源。通过学习和实践这个压缩包中的内容,开发者可以深入理解Web服务的概念,掌握使用Java构建和消费Web服务的技术。

    Android sensor-sample.zip

    在onSensorChanged()中,我们可以通过event.values数组获取到传感器的最新读数。数组的索引对应传感器的轴,如加速度计的x、y、z轴。 在不再需要传感器数据时,别忘了注销监听器以释放资源: ```java ...

    openui5-sample-app, 使用 Grunt Karma & Bower的OpenUI5示例应用程序.zip

    openui5-sample-app, 使用 Grunt Karma & Bower的OpenUI5示例应用程序 openui5-sample-appOpenUI5 示例应用使用 Grunt,Karma & Bower正在启动安装 node.js ( 来自 nodejs.org ) 。安装Grunt的CLInpm in

    gourmet-coffee-sample-executable.zip

    gourmet-coffee-sample-executable.zipgourmet-coffee-sample-executable.zipgourmet-coffee-sample-executable.zip

Global site tag (gtag.js) - Google Analytics