科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道简介Java Server Faces

简介Java Server Faces

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

JSF(Java Server Faces)体系结构是一种Web应用程序框架,它是首个Web应用程序开发的标准框架。

作者:郭雄 来源:goCom 2007年12月26日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共3页)

我们现在可以将这个bean注册到faces-config.xml中:

<managed-bean> 
<managed-bean-name>userBean</managed-bean-name>
<managed-bean-class>com.primeton.jsf.test.User</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>

我现在可以随时在我的JSF应用中使用这个叫做“userBean”的bean。这个是通过JSF EL表达式来完成的。例如,将一个JSF UI组件绑定到userBean的一个属性上,我可以使用表达式#{userBean.name}作为一个JSF UI组件的参数值。现在,我将userBean的name属性绑定到一个JSF inputText UI组件上:

<h:inputText value="#{userBean.name}"/> 

现在,当组件的值改变时,userBean.name属性也跟着改变。如果userBean.name先改变也是一样。两者将自动保持同步,这是JSF的关键特性。

JSF托管bean的另外一个很重要的特性是它可以通过配置文件来初始化属性。比如说我现在可以通过在配置文件中增加额外的受管属性来为我的userBean定义一些初始的属性值。因此要为我的bean属性设置一些初始值,可以这样做:

<managed-bean> 
<managed-bean-name>userBean</managed-bean-name>
<managed-bean-class> com.primeton.jsf.test.User</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
<managed-property>
<property-name>name</property-name>
<value>jack</value>
</managed-property>
<managed-property>
<property-name>phone</property-name>
<value>13918888888</value>
</managed-property>
<managed-property>
<property-name>email</property-name>
<value>jack@primeton.com</value>
</managed-property>
</managed-bean>

要看到这样做的效果,可以构建一个包含有几个被绑定到那些属性的文本框字段的JSF页面,在首次运行这个页面的时候,可以看到从配置文件中设置的一些初始值。

这是JSF的源代码,在一个表单中有几个被关联到userBean属性的输入框:

<h:panelGrid columns="2" > 
<h:outputLabel value="Name"/><h:inputText value="#{userBean.name}"/>
<h:outputLabel value="Phone"/><h:inputText value="#{userBean.phone}"/>
<h:outputLabel value="Email"/><h:inputText value="#{userBean.email}"/>
</h:panelGrid>

如果我们之前没有在faces-config.xml配置文件中设置email属性的初始值,表单中的Email字段值将为空。

关于受管属性的特性,另一个值得指出的是除了管理简单类型的属性,JSF的托管Bean功具还可以处理List和Map这样的属性。比如我可以添加一个”tasks”List到我的userBean中:List tasks;再添加一个setter和getter方法。然后我可以将其作为一个受管属性来初始化这个List。

<managed-property> 
<property-name>tasks</property-name>
<list-entries>
<value>Finish Module A Designing</value>
<value>Finish Coding of Module A</value>
<value>Finish Testing Module A </value>
</list-entries>
</managed-property>

要在运行的时候看到这些初始值,可以在JSP页面中添加一个dataTable组件:

<p>Current Tasks:</p> 
<h:dataTable value="#{userBean.tasks}" var="task" border="0">
<h:column>
<h:outputText value="#{task}"/>
</h:column>
</h:dataTable>

将Map定义为一个受管属性与管理一个List非常相似,除了是要指定map-entries而不是输入list值。如果Map属性在userBean对象被创建时为null,JSF将创建一个新的HashMap并组装它。否则,它会在现的的Map中直接添加条目。比如我现在在userBean中添加一个contactorsBlog的Map并增加setter和getter方法。

在faces-config.xml中这样来初始化我的contactors Map的属性:

<managed-property> 
<property-name>contactorsBlog</property-name>
<map-entries>
<map-entry>
<key>Bill</key>
<value>http://gocom.primeton.com/blog/Bill</value>
</map-entry>
<map-entry>
<key>Kevin</key>
<value>http://gocom.primeton.com/blog/kevin</value>
</map-entry>
<map-entry>
<key>Alex</key>
<value>http://gocom.primeton.com/blog/alex</value>
</map-entry>
</map-entries>
</managed-property> 

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章