锁定老帖子 主题:FreeMarker和Jsp的应用范围
精华帖 (4) :: 良好帖 (2) :: 新手帖 (1) :: 隐藏帖 (2)
|
|
---|---|
作者 | 正文 |
发表时间:2009-11-25
http://key232323.iteye.com/blog/526338
感兴趣的去看看 |
|
返回顶楼 | |
发表时间:2009-11-26
key232323 写道 4.还是macro,jsp的include static / dyn实现方式,可重用性不如macro高。
一般情况下重用性只和设计有关,和技术无关。 这句话我觉得还是推荐老兄去用用macro为好,同是nested, 原始的include(page层面)和taglib(控件层面)的nested,不如tm的nested来的直接和明了 而且fm的配置相对简单,不需要<%@page 等,再者,做单元测试,不需要web容器, 还有就上有个老兄说的,错误提示更细,一看便知 tiles比这个强得多 |
|
返回顶楼 | |
发表时间:2009-11-26
还有个就是不必要把需要的Class import过来。。。
这个算scripty ?? 无所谓了,萝卜白菜各有所爱,讨论讨论而已 最近用个groovy + freemarker做**还是挺不错的,jsp忘记了不少,尤其是taglib,jstl标准的都不会用了,555 =以后用到了再拾起来。 lz莫非要结贴? |
|
返回顶楼 | |
发表时间:2009-11-26
1,我感觉服务器批量生成静态文件挺方便的,不知道是不是个优点
2,Data可以缓存 |
|
返回顶楼 | |
发表时间:2010-02-02
看了这么多 受教了~~
|
|
返回顶楼 | |
发表时间:2010-02-02
struts2的freemarker调试页面的时候不方便啊,freemarker一个小改动,就要重启tomcat,很麻烦啊,如果jsp就不用了,直接刷新项目,就可以看到改动的效果,你们怎么解决呢?
|
|
返回顶楼 | |
发表时间:2010-03-05
无意中看到这个贴,freemarker我倒是没用过,但也看过书和教程什么的,我的态度是对任何技术都不轻易进入,因为java领域这种噱头太多了。个人认为jsp作为视图模板是很不错的选择,其他模板技术没有好用到能替代他的程度。如果你用一种统一的风格就可以把事情做好,那就不要引入更多的技术。另外,由于ajax的出现,htm+js则可能是更好,更纯粹的选择。再有,就是BC/S结构,RIA会是主流,那么就会有客户端编程和服务器端编程的分工问题,已经不仅仅是技术和美工的分离了。 其实还有其他选择,比如flex,javafx,可以解决部分美工问题,不过就有点扯远了。
|
|
返回顶楼 | |
发表时间:2010-03-06
holan 写道 case0079 写道 那么页面嵌入代码的好处是什么?
保持controller的纯洁。 我不相信有谁能完全把页面剥得没有逻辑。 比如假如我要输出一个客户列表,假如这个客户是90后,需要输出非主流 你把逻辑写在controller里?从hibernate拿到客户List,你再遍历这个List,遇到90后,在客户的某个域里写上非主流? 那你这个客户的Model是不是不纯粹了?多了一个字段叫 是否非主流?还多遍历了一次List 这种逻辑是不是只能在视图层面上做? 这个例子很简单,但是以此类推,肯定会有逻辑在视图上做。 不是所有的逻辑都放在controller里才是好的 为什么不用jstl标签库呢,非要用<%%>? jstl一样可以做判断。只不过不让java在前台美工的眼里出现。 我感觉JSTL比在页面上写java代码好看的多。而且也方便,如果不会java的看到你写的页面会头疼的``` |
|
返回顶楼 | |
发表时间:2010-07-25
关于marco和taglib的争论
<#-- | 画面共用头部部分 | 创建者:杨涛 | 创建时间:2009-05-05 | 版本:1.0 --> <#macro head> <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8"> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <script type="text/javascript" src="${path}/js/jquery-1.4.2.min.gzjs"></script> <script type="text/javascript" src="${path}/js/jquery-easyui/easyloader.js"></script> <script type="text/javascript" src="${path}/js/My97DatePicker/WdatePicker.js"></script> <script type="text/javascript" src="${path}/js/util.js"></script> <link rel="stylesheet" type="text/css" href="${path}/js/jquery-easyui/themes/icon.css" /> <link rel="stylesheet" type="text/css" href="${path}/js/jquery-easyui/themes/default/pagination.css" /> <link rel="stylesheet" type="text/css" href="${path}/css/yangtao.css" /> <title>运输管理系统</title> </head> <script type="text/javascript"> using('linkbutton'); $(document).ready(function(){ $.ajaxSetup({ cache:false, dateType:'json' }); $(document).bind('contextmenu',function(){return false;}) }) </script> </#macro> <#-- | 通用的HTML模板宏,加入常用的js引用和公用的部分 | 作者: 杨涛 | 日期: 2010-06-09 --> <#macro html> <html> <@head/> <body> <#nested> </body> <@footer/> </html> </#macro> <#macro footer> <P id=copyRight align=center> <TABLE> <TBODY> <TR align=middle> <TD>版权所有</TD> </TR> <TR align=middle> <TD><A target=_blank>联系我们</A></TD> </TR> </TBODY> </TABLE> </#macro> 关于页面 <#include "/common/common.html"> <@html> <TABLE cellSpacing=0 cellPadding=0 width="100%" align=center border=0> <tr> <td width="15%" valign="top"> <table width="100%" class=queryTable> <tr> <th> 常量列表 </th> </tr> <tr> <td> <@select id="constantList" list=constantList size="30" style="width:220px;" onclick="changeSelection()"/> </td> </tr> </table> </td> <td width="85%" valign="top"> <TABLE cellSpacing=0 cellPadding=0 height="100%" width="100%" align=center border=0> <tr> <td> <div id="context"></div> </td> </tr> <tr> <td align="right"> <a class="easyui-linkbutton" icon="icon-add" id="btnAdd" onclick="addNew()">新增</a> </td> </tr> <tr> <td height="200" width="100%"> <iframe id="updateifm" frameborder="0" width="100%" height="100%"> </iframe> </td> </tr> </TABLE> </td> </tr> </TABLE> </@html> <script language="javascript" type="text/javascript"> function changeSelection() { var selectedValue = $("#constantList").val(); $.ajax( { url :'constant.selectByType.do', data : { "type" :selectedValue }, dataType :'html', success : function(html) { $('#context').html(html); } }) } function addNew() { var i = document.getElementById('constantList').selectedIndex; var type = "", typeName = ""; if (i >= 0) { type = document.getElementById('constantList').options[i].value; typeName = document.getElementById('constantList').options[i].text; } $('#updateifm').attr( 'src', 'constant.execute.do?target=ConstantAdd&type=' + encodeURI(type) + '&typeName=' + encodeURI(typeName)); } function update(id) { $('#updateifm').attr('src', 'constant.execute.do?target=ConstantUpdate&id=' + id); } function deleteRow(id, version) { $.post('constant.delete.do?id=' + id + "&version=" + version, showMsg, 'json') } </script> 去掉CSS,几乎可以让美工直接view 还有freemarker的function <#-- | 取得时间的function,省去了各种判断 --> <#function getTime time=""> <#if time?is_date> <#return time?string("yyyy-MM-dd HH:mm:ss")> <#else> <#return time> </#if> </#function> <#-- | 取得日期的function,省去了各种判断 --> <#function getDate time=""> <#if time?is_date> <#return time?string("yyyy-MM-dd")> <#else> <#return time> </#if> </#function> |
|
返回顶楼 | |