uicomponent?uidata是什么
你是否想了解更多关于uicomponent和uidata是什么的知识?在本文中,小编将为您详细介绍这两个话题,帮助您更好地理解。
uidata是什么
猪哥解答:
UI知道吧,UI界面这个名词如果不懂的话百度一下,Data你也应该知道是什么意思,连起来UIData可以理解为页面数据,页面的Table、Tree什么的可以用UIData来封装处理,下面给你转一个实例,也许会对你有帮助。
猪哥转帖:
UIData:表示数据集合,每个数据项由DataModel(标准JSF UIComponent Model Bean之一)的一个实例封装。该组件通常用来渲染表格、列表和树。
实例:
新建一个实体bean
package org.abc.jsf.vo;
public class ArticleVO{
private int id;
private String title;
private String body;
public ArticleVO(){
}
//getter setter
新建from类,jsf都是调用这类的方法
package org.abc.jsf.from;
import java.util.ArrayList;
import java.util.List;
import javax.faces.component.UIData;
import javax.faces.event.ActionEvent;
import jsftest.dal.ArticleDAL;
import jsftest.vo.ArticleVO;
import java.util.Collection;
public class ArticleForm{
private int id=0;
private String title;
private String body;
private ArrayList articles;
public ArticleForm(){
loadall();
}
private ArticleDAL dal=new ArticleDAL();
public void save()
{
ArticleVO vo=new ArticleVO();
vo.setBody(this.getBody());
vo.setTitle(this.getTitle());
if(this.getId()!=0)
{
vo.setId(this.getId());
}
dal.saveArticle(vo);
}
public void edit(ActionEvent event)
{//取页面集合的值
UIData table=(UIData) event.getComponent().getParent().getParent();
ArticleVO vo=new ArticleVO();//实例化ArticleVO
vo=(ArticleVO)table.getRowData();
this.setBody(vo.getBody());
this.setId(vo.getId());
this.setTitle(vo.getTitle());
}
public void delete(ActionEvent event)
{
UIData table=(UIData) event.getComponent().getParent().getParent();
ArticleVO vo=(ArticleVO)table.getRowData();
dal.deleteArticle(vo);
dal.LoadArticleAll();
}
public void loadall()
{
this.setArticles((ArrayList)dal.LoadArticleAll());
}
public String getBody(){
return body;
}
public int getId(){
return id;
}
public String getTitle(){
return title;
}
public Collection getArticles(){
//this.loadall();
if(articles==null)
{
articles=new ArrayList();
}
return articles;
}
public void setBody(String body){
this.body= body;
}
public void setId(int id){
this.id= id;
}
public void setTitle(String title){
this.title= title;
}
public void setArticles(ArrayList articles){
this.articles= articles;
}
}
前台页面:
<%@ page contentType="text/html; charset=GBK"%>
<%@taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<html>
<head>
<title>
jsp1
</title>
</head>
<body bgcolor="#ffffff">
<h:form>
<div align="left">
标题<h:inputText id="title" value="#{article.title}"/><br>
内容<h:inputTextarea id="currentMessage" value="#{article.body}" rows="10" cols="60"/>
<h:inputHidden value="#{article.id}"/>
</div>
<div align="center">
<h:commandButton value="save" action="#{article.save}"/>
</div>
<div align="center">
<h:commandButton value="clear" type="reset"/>
</div>
*************************************************************
<h:dataTable id="table" rowClasses="list-row" value="#{article.articles}" var="articles">
<h:column>
<h:outputText styleClass="small" value="#{articles.id}"/>
</h:column>
<h:column>
<h:commandLink id="editLink" actionListener="#{article.edit}">//绑定监听
<h:outputText value="edit"/>
</h:commandLink>
</h:column>
<h:column>
<h:commandLink id="deleteLink" actionListener="#{article.delete}">
<h:outputText value="delete"/>
</h:commandLink>
</h:column>
<h:column>
<h:outputText value="#{articles.title}"/>
</h:column>
<h:column>
<h:outputText value="#{articles.body}"/>
</h:column>
</h:dataTable>
</h:form>
</body>
</html>
如何使用FacesContext类
在Faces API中有两个类是要经常使用的.一个是FacesContext一个是ExternalContext,本篇文章讲解如何使用前者,在下面的一篇文章中在继续讲解任何使用后者:
对每个JSF请求,FacesServlet对象都会为其获取一个javax.faces. context.
FacesContext类的实例。FacesServlet对象将下列3个取自Web容器的对象传给javax.faces.context.FacesContextFactory对象的getFacesContext方法,以此来做到这一点:
● javax.servlet.ServletContext
● javax.servlet.ServletRequest
● javax.servlet.ServletResponse
这意味着FacesContext的实例里包含了所有处理JSF请求所需的每个请求的状态信息。图3-1展示了FacesContext实例里封装的其他一些对象。
如何使用FacesContext类
图3-1 FacesContext实例及其封装的对象
3.2.1获取当前实例
一个经常用到的方法是静态的getCurrentInstance方法,它返回当前的FacesContext实例。此方法的签名如下:
public static FacesContext getCurrentInstance()
下面的代码是一个用此方法获取FacesContext当前实例的例子:
FacesContext facesContext= FacesContext.getCurrentInstance();
3.2.2获取和修改组件树
FacesContext实例里最重要的内容是请求页面的组件树。组件树是由javax.faces.tree.Tree类来表示的(本章后面的“使用Tree类”一节会讨论)。FacesContext实例的tree属性就是Tree对象。
要获取或修改Tree对象,可使用tree属性的读取方法和赋值方法:
public abstract Tree getTree()
public abstract void setTree(Tree tree)
3.2.3添加和获取消息
在请求处理生命周期里,可能会遇到错误。比如,当验证器执行输入验证时,因为用户输入了不正确的值,验证可能失败;当组件试图把输入值转换为绑定到组件的模型对象所需的类型时,也可能会失败。所有消息都必须存放到FacesContext实例里以备后面进行处理。比如,您可能希望在页面里显示错误消息,从而为用户更正错误提供帮助。
错误消息是由javax.faces.application.Message接口(第11章再详细讨论)来表示的,您可以通过使用FacesContext类的addMessage方法向FacesContext实例里添加Message对象。这个方法的签名如下:
public abstract void addMessage(UIComponent component, Message message)
如果component不为空,新加入的message就关联到component上。否则,它就不与任何特定组件的实例相关。
举例来说,验证器在验证组件值失败时可调用FacesContext的addMessage方法,传入值无效的组件及一个包含特定错误消息的Message对象。
所有添加到FacesContext实例的Message对象都被加入到一个集合里。可通过调用getMessages方法的两个重载方法之一来获取加入的Message对象:
public abstract Iterator getMessages()
public abstract Iterator getMessages(UIComponent component)
第一种形式的调用在一个Iterator里返回所有Message对象,而第二种形式的调用则仅返回与给定UIComponent相关联的Message对象。
3.2.4添加和获取请求处理事件
UIComponent可以生成FacesEvent对象。比如,当单击一个UICommand组件时,它会生成一个ActionEvent对象(ActionEvent类是FacesEvent类的子类)。这个FacesEvent对象需要在FacesContext实例里保存起来,以备请求处理生命周期里的下一步处理事件时所用。
可通过使用FacesContext类的addFacesEvent方法向FacesContext实例添加FacesEvent对象。此方法的签名如下:
public abstract void addFacesEvent(FacesEvent event)
要提取先前添加的FacesEvent对象,可调用getFacesEvents方法,其签名如下:
public abstract Iterator getFacesEvents()
此方法返回FacesEvent时的顺序与其在队列中的顺序一致。
3.2.5向Response对象里写入信息
为了向Response对象里写入信息,FacesContext类提供了两个属性,一个是javax.faces.Context.ResponseStream类型,另一个是javax.faces.context.ResponseWriter类型。ResponseStream类型的对象用于输出二进制数据,而ResponseWriter类型的对象则用于输出字符。这些属性的读取方法和赋值方法如下:
public abstract ResponseStream getResponseStream()
public abstract void setResponseStream(ResponseStream responseStream)
public abstract ResponseWriter getResponseWriter()
public abstract void setResponseWriter(ResponseWriter responseWriter)
3.2.6获取和设置地区
第11章将会讨论到,JSF支持国际化和本地化。这意味着您可以根据用户的地区决定发送什么样的回应信息。locale属性里存放了当前处理中所用的Locale对象。
初始状况下,locale属性的值和网络浏览器里指定的地区是一样的,但可以修改这个值,从而发送输出所使用的地区将独立于浏览器所使用的地区。此属性的读取方法和赋值方法如下:
public abstract Locale getLocale()
public abstract void setLocale(Locale locale)
3.2.7操作请求处理生命周期
FacesContext类还提供了两个方法与请求处理生命周期进行交互:
●在当前阶段的处理完成后,调用renderResponse方法通知JSF实现把控制权转到呈现响应阶段。也就是说,处于当前阶段和呈现响应阶段之间的所有其他阶段都不再执行。
●调用responseComplete方法,告诉JSF实现此次请求的HTTP响应已经完成(比如在使用了HTTP重定向的情况下)。因此,当前阶段完成后,必须中止请求处理生命周期的处理。
这些方法的签名如下:
public abstract void renderResponse()
public abstract void responseComplete()
3.2.8获取其他请求状态信息
其他每个请求的状态信息封装在ExternalContext对象里,可以使用getExternalContext方法获取该对象:
public abstract ExternalContext getExternalContext()
好了,本文到此结束,如果可以帮助到大家,还望关注本站哦!