最近项目使用EJB3+JSF开发,曾经学过EJB,不过忘得差不多了,JSF完全没接触过,从零开始,学得好辛苦啊!
可以先了解jsf的入门的基础:入门之hello world
http://liusuper.iteye.com/blog/214089
之前使用struts,和后台的交互,从后台获取数据,都是通过struts的值栈(Value stack)以及ActionContext等获取后台数据,或者通过<S:ACTION>标签,自动调用action加载页面
但是刚开始接触jsf,完全没有搞明白,是怎么自动加载数据的。现在终于有点理解了。
在jsf中,每个数据都可以通过javabean(包括action)里get方法获取数据
例如<h:dataTable value="#{subscriber.subscriberList}" var="u" >
解析标签是会去找叫做subscriber的javabean,然后调用getSubscriberList()方法,获取返回的数据放到table里,就相当于struts通过<s:action>自动获取后台数据
目前用的标签有
<f:view> : 表示内部标签为jsf标签,在jsp文件中使用jsf标签时,必须在外面套上<f:view>
<h:commandLink>: 其实相当与HTML里的<a>标签,不过它可以提交表单到action,必须在<h:form>里使用
<h:dataTable>: 会自动解析成表格,结合EL可以从action或者javabean里取数据。
示例:表subscriber(用户)包含外键role_id,DAO和Service,action简化后如下(EJB参考下一篇EJB3入门)
@Named("subscriber")
@RequestScoped
public class SubscriberAction implements Action, Serializable {
private static final long serialVersionUID = 1L;
private String uuid;
private String realName;
private Integer roleId;
@EJB
private SubscriberService subscriberService;
@EJB
private RoleService roleService;
public SubscriberAction() {
}
public List<Subscriber> getSubscriberList() {
return subscriberService.getAll();
}
public void setUuid(String uuid) {
this.uuid = uuid;
}
public String getUuid() {
return uuid;
}
public String getRealName() {
return realName;
}
public void setRealName(String realName) {
this.realName = realName;
}
public Subscriber get() {
return subscriberService.get(uuid);
}
public Subscriber delete() {
return subscriberService.delete(uuid);
}
}
JSP页面
<f:view>
<h:form>
<h:dataTable value="#{subscriber.subscriberList}" var="u" >
<h:column>
<f:facet name="header">
<h:outputText value="姓名" />
</f:facet>
<h:outputText value="#{u.userName}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="角色" /></f:facet>
<h:outputText value="#{u.role.roleName}" /> <!-- 注意 此处因为在定义表EntityBean的时候配置lazy=false,所以可以直接取出role -->
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="操作" />
</f:facet>
<h:commandLink action="#{subscriber.get}" value="编辑" >
<f:param value="#{u.uuid}" name="uuid"></f:param>
</h:commandLink>
<f:verbatim> </f:verbatim>
<h:commandLink action="#{subscriber.delete}" value="删除" >
<f:param value="#{u.uuid}" name="uuid"></f:param>
</h:commandLink>
</h:column>
</h:dataTable>
</h:form>
</f:view>
还有几个比较简单的,大家比较容易理解使用的标签
<h:inputHidden value="#{subscriber.uuid }" /> 相当于<input type="hidden">
<h:outputText value="#{subscriber.errorMessage }" /> 相当于直接在JSF中输出文本
<h:commandButton value="提交" action="#{subscriber.update }"/> 相当于 <input type="submit">
不过action是写在这个标签里 而不是写在<H:FORM>里
<h:selectOneMenu>: 下拉菜单嚒,就是是<select />嚒,和<h:selectItems>联合使用。
<h:selectItems>,下拉菜单中的列表,参数直接用list<Subscriber>会有点问题。。。。要用List<SelectItem>
示例:
@ManagedBean(name="role")
@SessionScoped
public class RoleBean implements Serializable{
private static final long serialVersionUID = 1L;
@EJB
RoleService roleService;
public List<SelectItem> getRoleList() {
List<Role> roles = roleService.getAll();
List<SelectItem> roleList = new ArrayList<SelectItem>();
for(Role role : roles) {
roleList.add(new SelectItem(role.getId(),role.getRoleName()));
}
return roleList;
}
}
JSF中
<h:selectOneMenu value="#{subscriber.roleId }" >
<f:selectItems value="#{role.roleList}" />
</h:selectOneMenu>
还有一种用法不知道不知道行不行,反正我没有成功,直接返回List<xxx对象>
@ManagedBean(name="role")
@SessionScoped
public class RoleBean implements Serializable{
private static final long serialVersionUID = 1L;
@EJB
RoleService roleService;
public List<Role> getRoleList() {
List<Role> roleList= roleService.getAll();
return roleList;
}
}
JSF中,参数的用法是
<h:selectOneMenu value="#{subscriber.roleId }" >
<f:selectItems value="#{role.roleList}" var="r" itemLabel="#{r.roleName}" itemValue="#{r.id}"/>
</h:selectOneMenu>
上例中label是正确显示的,但是value却不是id,很诡异,继续摸索。。。。
先写这么多,待续。。
后面陆续用了一些其他标签,不过后来用了richface4了,还没整理。。。
原创,转载请注明原:
分享到:
相关推荐
JSF入门与标签.JSF入门与标签.JSF入门与标签.JSF入门与标签.
JSF入门教程 JSF入门教程 JSF入门教程
很好的学习jsf入门实例!
jsf入门+标签 中文版
JSF的学习入门知识教程,里面有例子还有各个标签的使用及属性介绍
jsf实例 JSF学习 JSF jar包 JSF jsf实例 JSF学习 JSF jar包 JSFjsf实例 JSF学习 JSF jar包 JSF jsf实例 JSF学习 JSF jar包 JSF
这是一个JSF标签应用的实例。解压以后可以在tomcat5.x下部署运行。可以作为JSF开发的参考
该ppt适合于jsf入门学习者,ppt中有jsf配置、标签说明和例子距离。
JSF入门教程 JSF标签 JSF的LIB Ajax4JSF使用手册 JSF项目的创建 包你入门
jsf 入门 helloWorld 带说明:http://blog.csdn.net/w420372197/article/details/7823038
JSF入门详细资料(PDF),包括JSF入门中文版,JSF Web应用实战开发,以及JSF2,JSF入门必配学习资料
JSF入门级教程..
JSF 入门 JSF简单例子。适合新人来看,老人也可以温习。
一个小例子适合jsf入门者。本人自己敲的代码 完全可用 启动服务器(tomcat)部署之后 输入:http://localhost:8080/HelloJsf/HelloWorld.faces就可以了
一个比较全的jsf入门教程,对新手入学有较大的帮助!
第一个JSF程序,初学JSF者必备,jsf架包 jsf实例
JSF入门指南......
JSF 项目 入门 很好的资料 ,对初学jsf 的朋友很有帮助 对个人入门帮助很大
jsf 分页jsf 分页 可直接在myeclipse6.0以上版本运行