正则表达式介l?/strong>
正则表达式语法参?/strong>
替换表达?br />
模式名称 | 启用Q禁?br /> | ~省启用 | 说明 |
UNIX_LINES | (?d)启用Q??-d)用 | ?br /> | 启用Unix行模式?br />在此模式下,只有 '\n'被认为是行结束符。它会媄?tt>., ^, ?$ 的行为?br /> |
CASE_INSENSITIVE | (?i)启用Q??-i)用 | ?br /> | 启用忽略大小写模式?br />~省Ӟ忽略大小写模式只会媄?ASCII字符的匹配?而Unicode范围的忽略大写匚w需要通过 UNICODE_CASE 标志与本标志联合使用?br />启用此模式会影响匚w性能?br /> |
COMMENTS | (?x)启用Q??-x)用 | ?br /> | 允许I格和注释出现在正则表达式中?br />在此模式下,I格被忽略,?开始的单行注释被忽略? |
MULTILINE | (?m)启用Q??-m)用 | ?br /> | 启用多行模式?br />In multiline mode the expressions ^ and $ match just after or just before, respectively, a line terminator or the end of the input sequence. By default these expressions only match at the beginning and the end of the entire input sequence. |
DOTALL | (?s)启用Q??-s)用 | ?br /> | ?可以匚w行结束符?br />在此模式下,元字W?tt>.可以匚w行结束符。缺省不允许如此匚w?br /> |
UNICODE_CASE | (?u)启用Q??-u)用 | ?br /> | Enables Unicode-aware case folding. When this flag is specified then case-insensitive matching, when enabled by the CASE_INSENSITIVE flag, is done in a manner consistent with the Unicode Standard. By default, case-insensitive matching assumes that only characters in the US-ASCII charset are being matched. 启用此模式会影响性能?br /> |
CANON_EQ | (?c)启用Q??-c)用 | ?br /> | Enables canonical equivalence. When this flag is specified then two characters will be considered to match if, and only if, their full canonical decompositions match. The expression "a\u030A", for example, will match the string "?" when this flag is specified. By default, matching does not take canonical equivalence into account. 启用此模式会影响性能?br /> |
正则表达式字W串 | 匚w的字W串 |
X | 字符XQ包?CJK ExtB 区汉?br /> |
\\ | 反斜杠\ |
\0n | 八进?n代表的字W?0<=n<=7) |
\0nn | 八进?nn代表的字W?0<=n<=7) |
\0mnn | 八进?mnn代表的字W?0<=m<=3,0<=n<=7) |
\xhh | 十六q制 0xhh所代表的字W?br /> |
\uhhhh | 十六q制 0xhhhh所代表的字W?font color="#ff0000">注意Q目前尚不支持CJK ExtB区汉字?br /> |
\t | 制表W?'\u0009') |
\n | 换行('\u000A') |
\r | 回R('\u000D') |
\a | 响铃W?'\u0007') |
\e | 取消WEscape('\001B') |
\cx | x所代表的控制字W?br /> |
正则表达式字W串 | 匚w的字W串 |
XY | X后面跟随Y |
X|Y | X或?i>Y |
(X) | X作ؓ分组表达?br /> |
正则表达式字W串 | 匚w的字W串 |
\n | W?b>n个匹配的分组 |
边界字符 | 匚w的字W串 |
^ | 行首 |
$ | 行末 |
\b | 字符边界 |
\B | 非字W边?br /> |
\A | 输入的开?br /> |
\G | 上次匚w的结束处 |
\Z | 输入的l束Q或者是最后一个行l束W,参见行结束符?br /> |
\z | 输入的l束 |
正则表达式字W串 | 匚w的字W串 |
X? | X重复一ơ,或者不重复 |
X* | X重复0ơ或多次 |
X+ | X重复1ơ或多次 |
X{n} | X重复nơ,不多也不?br /> |
X{n,} | X臛_重复n?br /> |
X{n,m} | X臛_重复nơ,臛_重复mơ?br /> |
正则表达式字W串子集 | 匚w的字W串 | l合方式 |
[abc] | 字符a,b或cQ包?CJK ExtB 区汉?br /> | 单子?br /> |
[^abc] | L非a,b或c的字W?br /> | 排除 |
[a-zA-Z] | 从a到zQ或者A到ZQ包含a,z,A,Z?br /> | 区间 |
[a-d[m-p]] | 从a到dQ或者m到pQ等于[a-dm-p]?br /> | 联合 |
[a-z&&[def]] | d,e或者f?br /> | 交集 |
[a-z&&[^bc]] | 从a到zQ除了b和cQ等于[ad-z] | 扣除 |
[a-z&&[^m-p]] | 从a到zQƈ且不包括从m到pQ等于[a-lq-z] | 扣除 |
边界字符 | 匚w的字W串 |
. | L字符Q可能匹配行l束W?br /> |
\d | 数字[0-9] |
\D | 非数字[^0-9] |
\s | I白W[ \t\n\x0B\f\r] |
\S | 非空白符[^\s] |
\w | 单词W,包含有字母和数字[a-zA-Z_0-9] |
\W | 非单词符Q不包含有字母和数字?br /> |
正则表达式字W串 | 匚w的字W串 |
名称 | 块名Uͼ\p{InXXX}Q?br /> | 化通配W?br /> | 标准Unicode块,或者汉字列?br /> |
L双字节字W(汉字或全角符P | \p{InQuqnJiao} | \E | L由GBK表示的汉字,不包括GB18030扩展部分Q?br />以及CJK ExtB区的汉字?br /> |
L单字节字W?br /> | \p{InFQuanJiao} | \~E | L单字节字W?br /> |
L全角ASCII字符 | \p{InQJAscii} | \H | 标准HalfwidthandFullwidthForms?br /> |
L收录在BIG5码集中的双字节字W?br /> | \p{InBig5} | \I | Big5可编码双字节字符 |
匚w未收录在BIG5码集中的双字节字W? | \p{InFBig5} | \~I | 非Big5可编码双字节字符 |
匚wL汉字(不包括符? | \p{InHanziOrCJKExtB} | \X | L汉字Q包括GB18030扩展部分?br /> |
匚wL汉字(不包括符? | \p{InHanzi} | \M | L汉字Q不包括GB18030扩展部分?br /> |
匚w非汉字的双字节字W?br /> | \p{InFHanzi} | \~M | L非汉字的双字节字W, 包括GB18030扩展部分?br /> |
地支字符 | \p{InDiZhi} | \U | 子丑寅卯辰埩午未申酉戌亥 |
匚w收录在GB码集中的双字节字W?br /> | \p{InGB} | \g | 收录在GB码集中的双字节字W, 不包括GB18030扩展部分?br /> |
匚w非收录在GB码集中的双字节字W?br /> | \p{InFGB} | \~g | 未收录在GB码集中的双字节字W, 不包括GB18030扩展部分?br /> |
匚w收录在GBK码集中的双字节字W?br /> | \p{InGBK} | \h | 收录在GBK码集中的双字节字W, 不包括GB18030扩展部分?br /> |
匚w非收录在GBK码集中的双字节字W?br /> | \p{InFGBK} | \~h | 未收录在GBK码集中的双字节字W, 不包括GB18030扩展部分?br /> |
大写希腊字母 | \p{InDaXila} | \K | ΑΒΓΔΕΖΗΘΙΚΛΜΝ ΞΟΠΡΣf`ΦΨΩ |
日文片假?br /> | \p{InPianJia} | \j | 标准Katakana?br /> |
日文q_?br /> | \p{InPingJia} | \J | 标准Hiragana?br /> |
写希腊字母 | \p{InXiaoXila} | \k | βδεζηθικλμ^ ξοπρστυφχψω |
数学W号 | \p{InMathe} | \m | u×÷∶∧∨∑∏∪∩∈∷√⊥∥∠⌒?br />∫∮≡≌≈∽∝≠≮≯≤≥∞∵?br /> |
中文数字 | \p{InCnDigit} | \i | 〇一二三四五六七八九十百千万亿兆吉京 |
大写中文数字 | \p{InDaCnDigit} | \N | 零壹贰叁肆伍陆柒捌玖拾䘪仟萬亿兆吉京 |
全角标点W号 | \p{InQJBiaoDian} | \o | 、。·ˉˇ¨〃々—~‖…‘’“”〔?br />〈〉《》「」『』〖〗【】!Q'Q)Q?br />Q.Q;Q=Q?Q]{|}`H﹊H﹌H﹎H﹐H﹒H﹕H﹗H﹚ H﹜H﹞|︶|ؓ|﹀|DH﹂H﹄ |Ӈ|P|x|?br /> |
写俄文字母 | \p{InXiaoEWen} | \l | аб{Cеёжзийaxмн о\рстуфхцчшщъыьэюя |
大写俄文字母 | \p{InDaEWen} | \R | АБВГДЕЁЖЗИЙКЛМНО ПРСТУФ[ЦЧШЩЪЫЬfy |
中文序号 | \p{InCnSN} | \q | ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫ ⅰⅱ⅜yⅴⅵⅶⅷⅸⅹ 再加上Unicode标准EnclosedAlphanumerics?br /> |
天干字符 | \p{InTianGan} | \T | 甲乙丙丁戊己庚辛壬癸 |
竖排标点W号 | \p{InSPBiaoDian} | \V | |︶|ؓ|﹀|DH﹂H﹄|Ӈ|P|x|?br /> |
拼音字符 | \p{InPinyin} | \y | ā֙ǎàēéě؈īTǐìōQǒòūúǔùǖǘǚǜü^ɑńň GBK -> 0xA8A1- 0xA8C0 只是Unicode标准LatinExtended-A块的一部分?br /> |
注音字符 | \p{InZhuyin} | \Y | 标准Bopomofo?br /> |
制表字符 | \p{InZhiBiao} | \C | 标准BoxDrawing块?br />l检查发?textpro 的算法含有部分非?br />准Unicode制表W:“∟∣≒≦≧⊎앐”?br /> |
正则表达式字W串 | 匚w的字W串 |
\p{Lower} | 写字母[a-z] |
\p{Upper} | 大写字母[A-Z] |
\p{ASCII} | 所有的ASCII字符[\x00-\x7F] |
\p{Alpha} | 大小写字母[\p{Lower}\p{Upper}] |
\p{Digit} | 数字[0-9] |
\p{Alnum} | 字母数字W,包含大小写字母和数字[\p{Alpha}\p{Digit}] |
\p{Punct} | 标点W号Q?"#$%&'()*+,-./:;<=>?@[\]^_`{|}~之一?br /> |
\p{Graph} | 可显C字W[\p{Alnum}\p{Punct}] |
\p{Print} | 可打印字W[\p{Graph}] |
\p{Blank} | I格或者制表符[ \t] |
\p{Cntrl} | 控制字符[\x00-\x1F\x7F |
\p{XDigit} | 十六q制数字[0-9a-fA-F] |
\p{Space} | I白W[ \t\n\x0B\f\r] |
?br /> | 中文名称Q摘自Word XPQ?br /> | 代码区域 |
BasicLatin | 基本拉丁?br /> | \u0000-\u007F |
Latin-1Supplement | 拉丁?1 | \u0080-\u00FF |
LatinExtended-A | 拉丁语扩?A | \u0100-\u017F |
LatinExtended-Bound | 拉丁语扩?B | \u0180-\u024F |
IPAExtensions | 国际x扩充 | \u0250-\u02AF |
SpacingModifierLetters | q格的修饰字W?br /> | \u02B0-\u02FF |
CombiningDiacriticalMarks | l合用发音符 | \u0300-\u036F |
Greek | 基本希腊?br /> | \u0370-\u03FF |
Cyrillic | 襉K语 | \u0400-\u04FF |
Armenian | \u0530-\u058F | |
Hebrew | \u0590-\u05FF | |
Arabic | \u0600-\u06FF | |
Syriac | \u0700-\u074F | |
Thaana | \u0780-\u07BF | |
Devanagari | \u0900-\u097F | |
Bengali | \u0980-\u09FF | |
Gurmukhi | \u0A00-\u0A7F | |
Gujarati | \u0A80-\u0AFF | |
Oriya | \u0B00-\u0B7F | |
Tamil | \u0B80-\u0BFF | |
Telugu | \u0C00-\u0C7F | |
Kannada | \u0C80-\u0CFF | |
Malayalam | \u0D00-\u0D7F | |
Sinhala | \u0D800-\uDFF | |
Thai | \u0E00-\u0E7F | |
Lao | \u0E80-\u0EFF | |
Tibetan | 藏语 | \u0F00-\u0FFF |
Myanmar | \u1000-\u109F | |
Georgian | \u10A0-\u10FF | |
HangulJamo | \u1100-\u11FF | |
Ethiopic | \u1200-\u137F | |
Cherokee | \u13A0-\u13FF | |
UnifiedCanadianAboriginalSyllabics | \u1400-\u167F | |
Ogham | \u1680-\u169F | |
Runic | \u16A0-\u16FF | |
Khmer | \u1780-\u17FF | |
Mongolian | 蒙古?br /> | \u1800-\u18AF |
LatinExtendedAdditional | \u1E00-\u1EFF | |
GreekExtended | \u1F00-\u1FFF | |
GeneralPunctuation | q义标点 | \u2000-\u206F |
SuperscriptsandSubscripts | \u2070-\u209F | |
CurrencySymbols | 货币W号 | \u20A0-\u20CF |
CombiningMarksforSymbols | \u20D0-\u20FF | |
LetterlikeSymbols | cM字母的符?br /> | \u2100-\u214F |
NumberForms | 数字形式 | \u2150-\u218F |
Arrows | 头 | \u2190-\u21FF |
MathematicalOperators | 数学q算W?br /> | \u2200-\u22FF |
MiscellaneousTechnical | 零杂技术用W号 | \u2300-\u23FF |
ControlPictures | \u2400-\u243F | |
OpticalCharacterRecognition | \u2440-\u245F | |
EnclosedAlphanumerics | 带括L字母数字 | \u2460-\u24FF |
BoxDrawing | 制表W?br /> | \u2500-\u257F |
BlockElements | 方块囑Ş | \u2580-\u259F |
GeometricShapes | 几何囑Ş | \u25A0-\u25FF |
MiscellaneousSymbols | 零杂丁贝W(C意W等Q?br /> | \u2600-\u26FF |
Dingbats | \u2700-\u27BF | |
BraillePatterns | \u2800-\u28FF | |
CJKRadicalsSupplement | \u2E80-\u2EFF | |
KangxiRadicals | \u2F00-\u2FDF | |
IdeographicDescriptionCharacters | \u2FF0-\u2FFF | |
CJKSymbolsandPunctuation | CJKW号和标?br /> | \u3000-\u303F |
Hiragana | q_?br /> | \u3040-\u309F |
Katakana | 片假?br /> | \u30A0-\u30FF |
Bopomofo | 注音 | \u3100-\u312F |
HangulCompatibilityJamo | \u3130-\u318F | |
Kanbun | \u3190-\u319F | |
BopomofoExtended | 扩展注音 | \u31A0-\u31BF |
EnclosedCJKLettersandMonths | 带括LCJK字母及月?br /> | \u3200-\u32FF |
CJKCompatibility | CJK兼容字符 | \u3300-\u33FF |
CJKUnifiedIdeographsExtensionA | CJKl一汉字扩展-A | \u3400-\u4dBF |
CJKUnifiedIdeographs | CJKl一汉字 | \u4E00-\u9fAF |
YiSyllables | \uA000-\uA48F | |
YiRadicals | \uA490-\uA4CF | |
HangulSyllables | \uAC00-\uD7A3 | |
HighSurrogates | \uD800-\uDB7F | |
HighPrivateUseSurrogates | \uDB80-\uDBFF | |
LowSurrogates | \uDC00-\uDFFF | |
PrivateUse | 专用?br /> | \uE000-\uF8FF |
CJKCompatibilityIdeographs | CJK兼容汉字 | \uF900-\uFAFF |
AlphabeticPresentationForms | \uFB00-\uFB4F | |
ArabicPresentationForms-A | \uFB50-\uFDFF | |
CombiningHalfMarks | \uFE20-\uFE2F | |
CJKCompatibilityForms | CJK兼容形式 | \uFE30-\uFE4F |
SmallFormVariants | 写变体 | \uFE50-\uFE6F |
ArabicPresentationForms-Bound | \uFE70-\ufeFF | |
Specials | \uFFF0-\uFFFF | |
HalfwidthandFullwidthForms | 半Ş及全形字W?br /> | \uFF00-\uFFEF |
分类 | 全称 | 说明 |
Cn | UNASSIGNED | |
Lu | UPPERCASE_LETTER | |
Ll | LOWERCASE_LETTER | |
Lt | TITLECASE_LETTER | |
Lm | MODIFIER_LETTER | |
Lo | OTHER_LETTER | |
Mn | NON_SPACING_MARK | |
Me | ENCLOSING_MARK | |
Mc | COMBINING_SPACING_MARK | |
Nd | DECIMAL_DIGIT_NUMBER | |
Nl | LETTER_NUMBER | |
No | OTHER_NUMBER | |
Zs | SPACE_SEPARATOR | |
Zl | LINE_SEPARATOR | |
Zp | PARAGRAPH_SEPARATOR | |
Cc | CNTRL | |
Cf | FORMAT | |
Co | PRIVATE_USE | |
Cs | SURROGATE | |
Pd | DASH_PUNCTUATION | |
Ps | START_PUNCTUATION | |
Pe | END_PUNCTUATION | |
Pc | CONNECTOR_PUNCTUATION | |
Po | OTHER_PUNCTUATION | |
Sm | MATH_SYMBOL | |
Sc | CURRENCY_SYMBOL | |
Sk | MODIFIER_SYMBOL | |
So | OTHER_SYMBOL | |
L | LETTER | |
M | MARK | |
N | NUMBER | |
Z | SEPARATOR | |
C | CONTROL | |
P | PUNCTUATION | |
S | SYMBOL | |
LD | LETTER_OR_DIGIT | |
L1 | Latin-1 | |
all | ALL | |
ASCII | ASCII | |
Alnum | 字母数字(0-9,a-z,A-Z) | |
Alpha | 字母(a-z,A-Z) | |
Blank | I格和制表符(' '|\t) | |
Cntrl | 控制字符Q不可打?br /> | |
Digit | 数字(0-9) | |
Graph | 可打C可视字母Q例如空? '是可打印的但不是可视字母Q?`a' 两者都是。) | |
Lower | 写字母 | |
Print | 可打印字母(非控制字W) | |
Punct | 标符P字母、数字、控制、空白符以外的字母)Q如Q?@#$%}{<>,./?[]{等?br /> | |
Space | I白W?' ',\t,0x09,0x0A,0x0B,0x0C,0x0D,0x20) | |
Upper | 大写字母 | |
XDigit | 十六q制数字(0-9Qa-f, A-F) |
Ҏ字符介绍 | 描述 |
\n | 换行 |
\b | 向前删除一个字W。当q个字符位于替换串之首时Q将删除匚w串之前的一个字W。若匚w串位于行首,匚w串所在行与前一行相合ƈ?br /> |
\d | 向后删除一个字W。当q个字符位于替换串之末时Q将删除匚w串之后的一个字W。若匚w串位于行末,匚w串所在行与下一行相合ƈ?br /> |
\e | 插入一个ESC字符 |
\t | 插入一个TAB字符 |
\n | n代表查找正则表达式中的子表达式(l)。\1代表W一个子表达式,\2代表W二个子表达式,依次cL。\0代表整个匚w到的字符丌Ӏ?br /> |
\v | 大写下一个字?br /> |
\U | 全部大写以后的字母,直到到其它指示Wؓ止?br /> |
\l | 写下一个字?br /> |
\L | 全部写以后的字母,直到到其它指示Wؓ止?br /> |
\E | 取消所有的字母大小写指C符?br /> |
比较2Q?java~程模型(Java Programming Model)
在前面我们提到Tapestry和JSF都允许表现层的模板直接和一个JavacM的属性和Ҏq行交互Q那q些cȝ实例在运行时是怎么创徏和管理的呢?
Tapestry
Tapestry的一个完整过E通常都要包括三个部分Q用于显C的面模板(一般就是html)Q带有相兛_性和Ҏ的javac,用于定义面模板上的控制元素和javacȝ关系的页面定义文件。Tapestry有着一套特D的讉KHttpSess ion、ServletContext的体pR?BR> 在一个页面定义文件中描述所有的数据l定是可以的Q但是一个页面控制元素却不能在request周期内,l定一个javacR在request周期内只能通过一个pagec访问一些属性和Ҏ。这其中最主要的限制就是关于pagecȝ问题Q一个pag ecdLBasePage或者AbstractPage的派生类。从另一斚w来说Q这意味着你所~写的表现层逻辑的代码将会和框架本n的实现有着非常紧密的耦合。不q,Tapestry未来的版本就会减这U耦合Q努力成Z个松耦合的编E模型?BR>
JSF
在JSF应用中没有页面定义文件。它只有一个全局的配|文Ӟ命名为:faces-config.xmlQ里面通常都定义了一?managed beans"。这些managed beans都是带有属性和事g监听器的定义良好的java bean。在faces-config.xml中定义的后端bean都有三个参数Q一个标识符、一个javacd、一个bean的生存周期,生存周期可以是request、session、application中的一U。一旦在 faces-config.xml中定义好了一个managed bean,那一个前端页面上的显C控制元素就可以使用标识W来兌q个bean。managed bean也可以配|ؓ引用另外一个managed bean?BR>
JSF和Tapestry都可以方便的与其他的中间层技术整合,比如Spring。JSF managed bean facility是一个IoCQInversion of ControlQ。通过诸如 JSF-Spring q样的扩展技术,我们可以方便其和Spring很好的整合在一P使得JSF的表辑ּ可以调用Spring的bean的方法。虽然Spring可以?Tapestry3.0整合Q但是在Tapestry4.0当中才能更好的充分发挥IoCҎ;Tape stry的领导Howard Lewis Ship已经在Tapestry启动了IoC框架的工作。Spring的bean会很轻杄注入到Tapestry应用的类中?BR>
JSF的编E模型提供了更大的灵zdQ因Z可以通过l合的方式来丰富你的代码功能。比如,你可以设定一个指定的managed bean完成面的某些功能,同时Q你也可以在q些bean里引用其他的managed bena,从而可在页面间׃n一些功能?BR>
而Tapestry必须使用cȝ承的ҎQ也是_Tapestry应用中的一个页面类必须从框架指定的基类中派?包含一大堆框架指定的状?Q这q不是一个理想的Ҏ?BR>
JSF能够非常直观的管理session和application周期内的状态: 面代码可以方便的访问managed beanQ而不其生命周期是request、sessionq是application。而Tapestry在这斚wq对差点,不过Q?Tapestry4.0在这斚w做了很大的改q,引入了类gJSF managed bean的技术,同时,q支持Java 5.0的annotaions技术,减少对XML配置文g的依赖,从而降低应用配|的复杂性?BR>
JSF在编E模型上来看Q与Tapestry相比h更大的灵zL?BR>
Ҏ1Q?面开?Page Development)
一个web应用实际上就是后端用java代码获取相应数据Qƈ数据传递给前端表现层代码,然后最l返回给l端用户。因此,在一个开发h员看来,当他初次接触JSF和TapestryӞ最直接的感觉就是JSF的表现层是基于JSP的模板技术,而Ta pestry的表现层模板基本可以看作是一个HTML?
JSF
JSF采用JSP的技术作为其表现层技术。与标准兼容的JSF实现必须实现一个核心组件的JSP标签集。下面的代码是一个用了JSFlg标签的Html代码Q?/FONT>
含有JSF标签的html面不能在标准浏览器中预览。要x览,必须使用JSF设计工具或者直接部|到应用中,在真实运行环境中览?BR> 对于JSF技术来_其表现层技术就是JSPQ但是这不是唯一的解x法。Hans Bergsten的文章介l了可供选择的其他的ҎQ读者可阅读该文章获取详l信息,Improving JSF by Dumping JSP?Bergsten的文章中指出了合JSF和JSP标签暴露出的一些问题。当Ӟq些问题在JSF1.2和JSP2.1中会得到解决?BR>
Tapestry
对于大多数的Tapestry应用来说QTapestry的表现层模板看v来就是一个简单的规则的HtmlQ只不过其中加入了一些Tapestry的属性。下面是一D例子代码:
<span jwcid = "@Conditional" condition = "ognl:currentHolidayBooking">
<p><strong>Holiday Details</strong></p>
<table>
<tr>
<td class = "label">No</td>
<td><span jwcid = "@Insert"
value = "ognl:currentHolidayBooking.holidayID">1</span>
</td>
</tr>
<tr>
<td class = "label">Start date</td>
<td><span jwcid = "@Insert"
value = "ognl:currentHolidayBooking.date" format = "ognl:dateFormat">1</span>
</td>
</tr>
<tr>
<td class = "label">Number of days</td>
<td><span jwcid = "@Insert"
value = "ognl:currentHolidayBooking.amount.value">1</span>
</td>
</tr>
<tr>
<td class = "label">Description</td>
<td><span jwcid = "@Insert"
value = "ognl:currentHolidayBooking.description">1</span>
</td>
</tr>
</table>
</span>
大家可以试把这D代码放入一个Html的body标签当中Q你会发现浏览器可以正常的观看它?BR> 上面的例子中Qjwcid = "@componentName"属性就是定义了一个Tapestry标签?BR> Tapestry的模板不仅仅可以用HTML作ؓ载体Q它也支持其他的一些标记语aQTapestry标签是具有良好格式的标签Q即必须成对出现?Tapestry模板技术支持的标记语言典型的就是HTML以及用于无线应用的WML。其最大的一个特?是Q可qServlet容器Q直接预览?BR>
事实上JSF标签׃不是标准的html标签Q得它对于初学者来_是难于用的。而对于很多javaE序员来_他们喜欢~辑HTML代码Q至是乐意~写html代码?BR>
JSF技术宣U的一个技术优点就是,可用同一个模板编写运行在不同讑֤上的应用Q由此带来很大的灉|性。然而,q样做,׃要协调不同设备间的表现差异性,那么很可能同一个模板,不能正好表C的输出。同Ӟ你不得不学习新的标签库的使用ҎQƈ且搞懂它们是怎样映射到html的。随着旉的推U,JSF标签的简z可帮助你很快的~写表现层代码,同时也降低了开发者对jsf设计工具的依赖?BR>
本文认ؓQJSF的学习成本高于其技术优炏V在大多数情况下Q我们ƈ不需要编写适应于不同设备的应用。尽JSF设计工具提供了简单的囑Ş化的Ҏ来构建和预览JSF应用Q但是在一个开发中Q页面设计h员更多的是喜Ƣ用行的HTML设计工具来编写和预览面Q这发生了一个冲H,卛_有将更多的页面工作{UdjavaE序员n上,因ؓ一个页面设计h员通常情况下是不乐意去操作JSF设计工具的?BR>
JSF开发者一直在L一U解册些问题的Ҏ。JSF技术设计良好的扩展体系Q得这成ؓ可能Q其中一个技术Q现出来,那就是表现层控制器。一个非常有前途的表现层控制器的实现就是Facelets,由java.net创徏的开放源代码目。Facelets的灵感就来源于Tapestry的模板模型,q得JSF不再依赖于JSP技术。Facelets允许开发者创建Tapestry风格的标{,像下面q段代码一P
在未来的一D|间内QFacelets会被开发者所采用Q或怼影响JSF未来的版本?BR>
和JSF比较QTapestry在表现层斚wZHTML代码,可被标准览器所览Q这正是它在表现层上的优势所在?BR>
作者: by Phil Zoio
译Q?nbsp; BlueCrystal
来自Q?nbsp; http://www.theserverside.com/articles/article.tss?l=JSFTapestry
目前应用很广泛而且也很成熟的Struts应用开发框Ӟ在未来几q里会逐渐淡出Q其ZAction(action-based)的开发模型也被z跃的javaC所推崇的新的开发模型所替代Q对于java开源社区来_q求完美是很多h的理惟뀂在2000q初诞生的Struts以及其他cM?MVC(Model View Controler)框架主要都是以操作ؓ中心Q且都是无状态的开发模型,而现在,Zlg(component-based)和事仉?event- driven)的开发模型逐渐行hQ在很多时候都成了Struts的有利竞争者,q其中来自jcp的jsr127-JavaServer Faces(JSF)以及来自apache的Tapestry是其中的g者?BR>
在这文章中Q我们将把这两种框架JSF和Tapestryq行详细的对比。我们的比较涉及到两种框架的设计、运行环境以及如何开发。比较的目的在于让读者了解这两种框架各自的优~点Q以便于在自q目中,Ҏ实际情况Q选择合适的框架。该文章的内容基于JSF1.1和Tapestry3.0.3 (在个别地方由于需要会谈到Tapestry4.0)?BR>
JSF和Tapestry?BR>
JSF源于JCP(Java Community Process)的JSR127规范。Sun公司自己同时也对该规范提供了一个实玎ͼ目前的版本是1.1Q而且该项目的设计者之一正是Struts的作?Craig McClanahan。另外一个JSF的实玎ͼ是Apache的一个项目MyFaces。目前,几个L的java开发工具厂商都在其java ide中提供了对jsf的支持,比如Sun、Oracle、IBM、Borland{,而且JSF的后l版本JSF1.2也将成ؓJ2EE5.0的一个组成部分?BR>
Tapestry最初于2000q在SourceForge注册Q来自于Apple WebObjectsQ随后,?003q成为Apache的一个项目。与JSF不同的是QTapestryq不是某一个jsr规范的实玎ͼ它仅仅是一个开源项目,当前版本?.0.3?.0版本预计也将在后面的一D|间内推出?BR> JSF和Tapestry作ؓMVC框架Q在一些基本特性上是非常类似的Q?BR>
在下面的章节里面Q我们将会看见这两个框架在各自的实现方式上是有很大区别的。对于大多数E序员来_Z两种框架做开发,是非常不同的两U体验?/FONT>
Sidebar: 例子E序
在下面本文提供了一个例子程序,该程序的代码大部分都在q片文章中做l的描述。这个程序主要就是一个管理个人假期的工具Q它的主要功能包括:
* 一个home界面Q?列出所有登记的假期Q包括假期开始时间、天C及一下描qC息;
* 一个detail界面Q用于浏览某一登记假期的详l信息;
* 一个new界面Q用于添加一个假期信息?BR>
下面q幅囑ֱCZ该程序的M程和功能:
你可以从下列地址下蝲该程序基于不同框架的源代码:
JSF version
Tapestry version