作者marinne (乳玛琳)
看板Web_Design
标题Re: [问题] 关於样版化...
时间Thu Mar 10 23:58:47 2005
※ 引述《luoqr ( )》之铭言:
: ※ 引述《luoqr ( )》之铭言:
: : 标题: [问题] 关於样版化...
: : 时间: Tue Mar 8 16:05:07 2005
: : 请问一下,如果用 JSP 要如何设计样版化的网页?
: : 就像 A 网页只是纯 html, B 网页是 jsp 这样,
: : 但 A 网页的资料来自於 B
: : 是要经过一个 parser 的动作吗?
: : 有没有更好的作法?
: : 我看到的范例好像都是说 JSP 把资料处理的事情交给後端
: : 但这样好像还是会在 html 中夹杂 jsp 程式码 @@
: : 这样感觉好像不是程式和网页分开...
: : 有谁能给我点议建吗?
: : 谢谢...
: : --
: : 有讨论这种相关的书吗
: : --
: : ◆ From: 140.115.221.131
: : 推 i1mare:不知道可不可以call function到网页,这样程式网页 220.135.196.47 03/09
: : → i1mare:就会分离了 220.135.196.47 03/09
: : 推 marinne:你需要的是JSTL,或者更新的玩意儿JSF 220.135.32.37 03/10
: : → marinne:JSTL的话,O'reilly有一本"JavaServer Pages" 220.135.32.37 03/10
: : → marinne:看这本书学,保证.jsp档案里面不会出现Java code 220.135.32.37 03/10
: : → marinne:O'reilly也有一本书名就叫做"JavaServer Faces" 220.135.32.37 03/10
: : 推 luoqr:感谢 :D 140.115.156.8 03/10
: 刚看了一下,好像是定义一堆 tag,然後直接在网页中
: 使用.....
: 但问题来了,如果我今天不喜欢这个版面,我要重新设
: 计一个介面,那这些 tag 不就要再重新嵌入一次?
: 像那些 <c:if test.../> 之类的判断式不见得会在
: 同一个地方嵌入吧,那等於重新写一次了不是吗?
: 有办法只改 html code,不用动到 jstl 或 jsp code 吗?
Life is not that easy. Orz
没错,使用JSTL,你的.jsp档案里面会有一堆<c:if ... />这类标签,
当你要改版面的时候,得重新更动这些JSTL标签。但重点在於所有这些
JSTL标签所代表的逻辑(而且通常都只是简单的if或者回圈等)都只和
版面的呈现方式有关,而与资料的结构(资料以何种型式储存在何种媒介,
以何种方式取得资料等等)或者商业规则(比方说,老板决定购物金额
未满500元,则必须收取70元物流处理费)无关,这些东西都放在你的
class里面,而这些class也不会出现在.jsp档案里面。
这就像使用PHP搭配Smarty样板系统。你的Smarty样板档案(.tpl)里面
会有HTML标签以及一堆Smarty提供的{if},{elseif},{foreach},{section}
这些标签,虽然有(简单的)逻辑在样板档案里面,但是这些逻辑和JSTL
一样,纯粹只和版面的呈现方式有关,而和资料结构与商业逻辑无关。
而你的.php档案里面从此就完全不会出现任何HTML了(再细分的话还可能
把资料结构和商业规则写成class另外储存,处理要求的.php档案只是利用
这些class,把资料丢进去,再把回应的资料丢给.tpl去显示)。
又或者使用code-behind的方式来写ASP.NET程式,你的.aspx档案里面只会
出现HTML以及一堆<asp:DataList... >,<asp:ListBox ...>这些ASP.NET
控制项的设定,而这些HTML和ASP.NET控制项设定也一样纯粹只和版面的
呈现方式有关。你的商业规则和资料存取程式码在xxx.dll里面,你的
xxx.aspx.cs则负责接收与验证资料(这两者里面都不会出现任何HTML),
丢给dll提供的class,再把回应的资料交给.aspx去负责显示在画面上。
所有这些,在改版面的时候都免不了需要重新编排一些HTML以外的东西。
JSTL的标签,Smarty的标签或者ASP.NET控制项的标签。不过这些code和
Java, PHP, C#(VB.NET)程式码相较之下都远远简单得多,而且都仅限於
一些简单的逻辑判断,比起将HTML与程式码混合在一起的做法,修改起来
要容易太多了。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.135.32.37
1F:推 luoqr:谢谢你的回应 给我很大收获 :) 140.115.156.8 03/11