一、<f:view>、<f:loadbundle>和<html>标记的位置
使用JSF国际化时,如果HTML页面的<title></title>部分需要用到绑定资源文件的信息,则<f:view>和<f:loadbundule>标签必须放在<html>标签之外,诸如以下所示:
没有使用资源绑定之前,页面代码如下:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>第一个JSF程序</title>
</head>
<body>
<f:view>
<h:form>
<h3>请输入你的名称</h3>
<h:outputText value="#{user.errMessage}" /><p>
名称:<h:inputText value="#{user.name}" /><p>
密码:<h:inputSecret value="#{user.password}" /><p>
<h:commandButton value="送出" action="#{user.verify}" />
</h:form>
</f:view>
</body>
</html>
使用了资源文件之后,代码的<f:view>,<f:loadbundle>标签提前到<html>标签前面:
<f:view locale="zh_CN">
<f:loadBundle basename="messages" var="msgs"/>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title><h:outputText value="#{msgs.titleText}"/></title>
</head>
<body>
<h:form>
<h3><h:outputText value="#{msgs.hintText}"/></h3>
<h:outputText value="#{user.errMessage}" /><p>
<h:outputText value="#{msgs.nameText}" />:
<h:inputText value="#{user.name}" /><p>
<h:outputText value="#{msgs.passText}" />:
<h:inputSecret value="#{user.password}" /><p>
<h:commandButton value="#{msgs.commandText}" action="#{user.verify}" />
</h:form>
</body>
</html>
</f:view>
否则页面在运行时会提示找不到标签,原因就是因为在加载资源文件之前<title></title>就已经使用了绑定,自然无法找到绑定的内容。
二、<f:view>的locale属性和faces-config.xml中<locale-config>配置的优先级别:
1.<f:view>没有设置locale,faces-config.xml没有设置<local-config>时采用浏览器的默认配置
2.<f:view>没有设置locale,但faces-config.xml中设置了<local-config>时,如果支持本地语言则采用<local-config>的<supported-locale>配置,否则采用<default-locale>
3.<f:view>设置了locale时,faces-config.xml没有设置<local-config>时采用<f:view>的配置
4.<f:view>设置了locale时,且faces-config.xml中设置了<local-config>时,采用<f:view>
posted @
2008-03-04 22:32 Paul Lin 阅读(1327) |
评论 (0) |
编辑 收藏
摘要: ·在抽象接口中包含了一个对行为接口的引用,这样的话行为的操作将完全委托给行为接口完成,抽象类无需关心。
·在抽象类的继承子类中,调用了行为类的子类来实现不同的行为。此时抽象类的子类中只知道属性,但不知道具体的行为实现,实现了概念与行为的分离
·在行为类的继承子类中,只知道执行相应的动作,但不知道具体的属性,实现了行为和概念的分离
阅读全文
posted @
2008-02-26 21:48 Paul Lin 阅读(2068) |
评论 (0) |
编辑 收藏
摘要: 使用Ant脚本来管理HSQLDB
阅读全文
posted @
2008-02-24 22:40 Paul Lin 阅读(2307) |
评论 (3) |
编辑 收藏
摘要: Decorator模式的实际应用--动态黑名单过滤
阅读全文
posted @
2008-02-19 18:31 Paul Lin 阅读(1759) |
评论 (0) |
编辑 收藏
摘要: Decrator模式的适用场合:
1).在运行时刻由用户动态决定加入的方式和时机,无法在编译期间决定
2).需要改变的行为太多,用继承会导致复杂性的增加
阅读全文
posted @
2008-02-19 16:33 Paul Lin 阅读(2076) |
评论 (0) |
编辑 收藏
摘要: 来自Dom4j中的cookbook
阅读全文
posted @
2008-01-30 17:13 Paul Lin 阅读(2229) |
评论 (0) |
编辑 收藏
由于敏捷开发的流行,TDD的概念近年来在国内被炒得很火,似乎TDD是一个深不可测的东西。
今天在看TDD的文章时,突然有了一个感觉:其实TDD的思想本来就很朴实,反而是我们开发人员一开始就背离了正确的路线和方法。
众所周知,TDD鼓励人们在编写实际的实现代码之前,就先写好测试代码。这一点对大多数程序员来说难以接受,总觉得实现代码都没有写,怎么写测试代码啊。其实我觉得这主要是观念上的误区和行为的惯性所致。
我们知道,开发商盖楼盘时都有一个建筑标准,而业主收楼时也有一个收楼标准。这些标准都是在实际的工程开工之前或业主正式入住之前就已经制定好的。正规的开发商会在建筑的过程中严格按照建筑标准来衡量自己的楼盘建设质量。看到有不符合要求的就马上改正。而不是事先不考虑任何的建筑或验收标准,等到整个楼盘盖好后再来。
这个道理和TDD是一样的,在任何工作开始之前,我们都应该先明确制定工作交付的标准。这一点在需求分析文档中已经明确体现出来了。到了实际编码阶段却反而变成相反了。没有了事实的验收标准,就等于没有了目标,连自己要做成什么模样都不知道,才会出现在联调阶段出现众多的bug而导致返工的情况,另一方面由于没有了验收标准,开发人员经常会出现不知道接口如何设计的困惑。
TDD就是要求我们在编码阶段先制定验收标准,再根据标准来开发。TDD的过程就是根据验收标准不断调整优化的过程,确保你始终沿着预定的目标前进,不会到最后变成一“豆腐渣工程”。
同时为了符合测试程序的要求,您的单元必须设计得可以测试,这迫使您设计程序时,考虑到单元的低耦合。
很多时候技术的思想都很朴实,就像OOP那样,其实OOP本来就来自于日常生活,虽然说做了高层的抽象,但始终可以通过和现实的类比来看到其本质。
posted @
2008-01-29 11:36 Paul Lin 阅读(1377) |
评论 (1) |
编辑 收藏
网上见到的《新闻联播口诀表》,很真实很搞笑很讽刺。河蟹社会的真实写照
----------------------------------------------------------------------------
会议没有不隆重的,闭幕没有不胜利的;
讲话没有不重要的,鼓掌没有不热烈的;
领导没有不重视的,看望没有不亲切的;
接见没有不亲自的,进展没有不顺利的;
完成没有不圆满的,成就没有不巨大的;
工作没有不扎实的,效率没有不显著的;
决议没有不通过的,人心没有不振奋的;
班子没有不团结的,群众没有不满意的;
领导没有不微笑的,问题没有不解决的;
事情没有不瞩目的,会谈没有不坦诚的;
反对没有不强烈的,交涉没有不严正的;
完成没有不超额的,竣工没有不提前的;
中日没有不友好的,中美没有不合作的;
节日没有不祥和的,妇女没有不解放的;
决策没有不英明的,路线没有不正确的;
扫黄没有不彻底的,行动没有不果断的;
形势没有不大好的,观点没有不赞同的;
气氛没有不友好的,信心没有不增强的;
粮食没有不丰收的,抗洪没有不英勇的;
贪官总是极少数的, 群众没有不受蒙蔽的
干涉没有不粗暴的,遗憾没有不深表的;
措施没有不得力的,成绩总是主要的;
法律没有不公正的,上诉没有不驳回的;
贯彻没有不彻底的,理论没有不高屋建瓴的;
政策没有不鼓舞人心的,大赛没有一次不冲击的;
抢救没有不及时的,损失没有不惨重的;
设计没有不合理的,技术没有不先进的;
论证没有不专家的,检测没有不严格的;
运行没有不可靠的,系统没有不安全的;
特色没有不中国的,失误没有不难免的;
农业没有不遭灾的,灾年没有不丰收的;
江河没有不治的,大水没有不发的;
团结没有不紧密的,拥护没有不一致的;
旗帜没有不高举的,思想没有不坚持的;
道路没有不曲折的, 前途没有不光明的
posted @
2008-01-25 12:54 Paul Lin 阅读(986) |
评论 (0) |
编辑 收藏
摘要: Composite模式的特点:
·Composite模式一般都有一个抽象类或接口来表示最基本的构件。
·Composite模式一般都由两类对象构成:表示单个元素的对象(Primitive)和表示多个元素组合的对象(Composite)
·Composite模式下Primitive和Composite对象都继承或实现上层接口或父类
·Composite模式下每个构件都含有三个基础方法:add(构件)、remove(构件)、iterator()
·Composite对象含有一个用来保存其下所有基础元素的的集合,例如:Vector,ArrayList,HashMap
·Composite对象的方法被调用时一般都会引起其下所有基础元素相同方法的调用,即递归调用。
阅读全文
posted @
2008-01-21 09:55 Paul Lin 阅读(3120) |
评论 (0) |
编辑 收藏
摘要: 《轻量级J2EE企业应用实战》一书的第2章有一个使用SerlvetResponse输出图像的例子,代码如下:
<%
BufferedImage image = new BufferedImage(400, 400, BufferedImage.TYPE_INT_RGB);
 ...
阅读全文
posted @
2008-01-19 22:24 Paul Lin 阅读(43322) |
评论 (10) |
编辑 收藏