`
asyty
  • 浏览: 345461 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

JSF入门 标签使用 实例(持续更新)

阅读更多

最近项目使用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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</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了,还没整理。。。

 

 

 

 

 

 

 

原创,转载请注明原:

http://asyty.iteye.com/blog/1239869

 

分享到:
评论
1 楼 我不是人 2013-01-04  
  正愁没地方学习

相关推荐

Global site tag (gtag.js) - Google Analytics