18. */ 19. public EchoEncoder getEncoder() { 20. return encoder; 21. } 22. 23. /** 24. * @return the echoText 25. */ 26. public String getEchoText() { 27. return echoText; 28. } 29. 30. public String getOutText() { 31. return encoder.Encode(echoText); 32. } 33. 34. /** 35. * @param echoText the echoText to set 36. */ 37. public void setEchoText(String echoText) { 38. this.echoText = echoText; 39. } 40. 41. public void echo() { 42. } 43. } EchoEncoder.java: Java代码
1. package test; 2. 3. public class EchoEncoder implements java.io.Serializable{ 4. 5. private static final long serialVersionUID = 8306351263183979293L; 6. private String author = \; 7. 8. /** 9. * @return the author 10. */ 11. public String getAuthor() { 12. return author; 13. } 14. 15. public String Encode(String msg) { 16. return msg.replaceAll(\, \).replaceAll(\, \).replaceAll(\\\n\, \); 17. } 18. } 先看第一个文件echo.xhtml,其中action=\,此处没有如JSF1.2中写一个表达式,这是新加入的一种导航方式,可以直接写文 件的除后缀以外的名称,JSF2引擎会自动找到对应的文件,然后导航。另外看看escape=\属性,这个是为了直接将内容中的标签以 html方式显示,你可以调整本例中escape以及后台返回的outText的方法,看看前面的显示,这是非常有趣的。
好了,这个例子可以运行了,在页面中输入http://localhost:8080/TestJsf2.0/echo.xhtml就可以访问了。
二、 将输入值组件化:
现在真正将上述例子用自定义的复合组件改写一下,整个过程会非常简单,后台的bean都不用改写,只用改变页面就行。
我们看看自定义的组件echoInputText.xhtml,此页面需要放在WebRoot下的resources/echo/文件夹下。
echoInputText.xhtml: Html代码
1. 2. 3. 7. 8.
此文件将echo.xhtml中的 Xml代码
1. 2. 请输入响应文字: 3.
echo.xhtml: Html代码
1. 2. 7.
我们来分析一下自定义的echoInputText组件,先看看echo.xhtml文件有什么变化。看看xml命名空间中
加入了 xmlns:echo=\,这个就是用来引用自定义的组件的,其中 http://java.sun.com/jsf/composite/会默认指向到resources文件夹,后面直接跟资源的目录。 resources文件夹是JSF2.0的一个默认资源放置文件夹,后面的echo就是指resources/echo/文件夹了。整个命名空间的意思就 是将此文件夹命名为echo。再看看echo.xhtml文件中一处变化: 此段告诉我们直接采用了echo命名空间下的echoInputText组件,其中有一个属性为echo,指向的就是managed bean:echo。 再看看echoInputText组件: Html代码 1. 最后,我们已经完成了一个简单的自定义符合组件,其中还用到了一下新的特性,大家可以多多查看JSF2.0的接口定义,去更多的了解。 在下一篇中我们来一起看看JSF2.0组件中另外一个激动人心的改进,页面模版化。