论坛首页 入门技术论坛

探讨一种兼容性框架

浏览 4925 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-03-13  
服务器端的MVC和客户端的MVC能否一起使用?最近一直在想这个问题,看了很多帖子也没有找到比较好的解决方案。

以下是我的一些想法,首先判断客户端浏览器是否支持JS
-》当客户端浏览器支持JS的时候,利用JS当作控制层;
-》当客户端浏览器不支持JS的时候,利用Action当作控制层。

问题是需要这样的一个模版,既可以让JSP解析(赋值),也可以让JS解析。

方案1:如果这个模版是XSL写的,比较容易解决,可是大多数美工不会XSL,这样就需要模版必须为HTML的样子。

大家都知道HTML需要美工经常修改,尤其是首页。
如果美工每次修改,我们再给转化为XSL,工作应该不比JSP套版省事。

方案2:目前知道Trimpath对HTML解析比较好,如果写一个Trimpath的服务器端实现,是不是就解决这个问题了?

方案3:修改Trimpath适应Velocity或者Freemarker的语法,但是这两种翻译器明显象个二楞子,是匹配文件路径,当浏览器支持JS时也不放过。

苦恼啊!
   发表时间:2007-03-13  
怎么没有人说话呀?都等了半天了。

有人知道一种服务器端类似于Trimpath的东西吗?或者类似于FreeMarker但不需要配置Filter的东西么?我感觉不用Filter才叫轻量级。

我知道jsp可以做到耦合xml和xsl,有耦合html和xml的东西么?
(CSDN的味道)挖塞,太直白了!
0 请登录后投票
   发表时间:2007-03-14  
看javeeye的两种登陆方式
0 请登录后投票
   发表时间:2007-03-14  
抛出异常的爱 写道
看javeeye的两种登陆方式

看过了,因为用TheWorld登陆不了,所以我一直用opera看javaeye.
0 请登录后投票
   发表时间:2007-03-14  
搞得有点复杂了把,
   MVC,在C里把数据搞到M里,V到M里拿数据显示就完事了,没那么复杂把
  


 
0 请登录后投票
   发表时间:2007-03-14  
giscat 写道
搞得有点复杂了把,
   MVC,在C里把数据搞到M里,V到M里拿数据显示就完事了,没那么复杂把 

理是这个理 ,举个例子吧 :

这是一个非常简单的典型模板,
number_dst也可以这样写<div id="number_dst"></div>,后面讨论
//index.html
<html>
<head>
<script src="prototype.js"></script>
<script src="index.js"></script>
</head>
<body>
<div id="number_src" style="display:none;">
当前有${number}人在线。
</div>
<form method="post" action="index.do">
<input type="submit" id="get_number" value="获取当前在线人数"/>
<div id="number_dst">
当前有${number}人在线。
</div>
</form>
</body>
</html>

到这里,美工完事了,接下来为支持js的浏览器写Control
//index.js
var get_number = $('get_number');
var number_src = $('number_src');
var number_dst = $('number_dst');
get_number.onclick	= function(){

	//简化代码,如何获得connection这里不讨论
    connection.getNumber(function (result) {
    	if(result!=null){
    		number_dst.innerHTML=TrimPath.processDOMTemplate(number_src.id, result);
    	}
    });
    return false; //返回false,不post到index.do
}

如果浏览器不支持js怎么办呢?post到index.do
index.do怎么写?这里是我犯难的事情。
//index.do
String number = someObj.getNumber();//假定返回正确的值
.....

如果采用方案1,index.html是xsl的文件,可以把number变为xml的进行耦合。问题是xsl和html之间的转化比较费人力。
如果采用方案3,把number放到session里面,配置freemarker或者velocity对index.html进行填值。
问题1:第一次访问index.do的时候,id="number_src"的变量${number}也填值了,不是我所希望的。
若第一次访问不进index.do.而进入index.html,freemarker或者velocity也不会对index.html放过。
若复制一个index.html为index.htm似乎解决了,那么还有问题:Trimpath和freemarker,velocity语法类似,毕竟不一样,需要修改trimpath为Freemarker的语法(比Freemarker更容易改)。
如果采用方案2:index.do中判断request参数是否支持js(或者不判断,都post过来了,肯定不支持),如果不支持,用trimpath的服务器端把number耦合到index.html 里面进行输出。

写到这里似乎有了办法,有更好的方法么?
忘记了从哪里看到要尽量少用filter,总感觉filter比较傻,而且还需要配置。
感觉方案2和方案3的差别:前者需要写trimpath的服务器端,后者需要修改trimpath的js.
0 请登录后投票
   发表时间:2007-03-14  
index.html可以这样写
//index.html   
<html>   
<head>   
<script src="prototype.js"></script>   
<script src="index.js"></script>   
</head>   
<body>   
<form method="post" action="index.do">   
<input type="submit" id="get_number" value="获取当前在线人数"/>   
<div id="number_src" style="display:none;">   
当前有${number}人在线。   
</div>   
<div id="number_dst"></div>   
</form>   
</body>   
</html> 

index.do中replace掉style="display:none;"
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics