JSF DataTable and Binding Attribute


JSF 中组件的 binding 是指 这个 HTML 组件要 绑定到那个 Bean 上,这个 Bean 本身跟 这个 HTML 组件是 一个类型的, 这样才能 get / set ,

上面你的代码中
<h:inputText id="firstname" binding="#{name.firstname}"/>
这里 name.firstname 应该是个 HtmlInputText 类的实例, 而你说它是个 Name 类型,所以类型不对,如果你只是 让他执行 name.setFirstname(); 来填充值(像 Struts 那样),那么你就应该用 <h:inputText id="firstname" value="#{name.firstname}"/& gt;


如果要用 binding 属性就这样

<h:outputText id="myOutputText" binding="#{myBean.myOutputText}"/>

用到 binding 还有一个地方很实用:
在一个 dataTable 中要得到当前行号,比如:


我这里 myBean.myTable 是个 DataTable 类型, 这样迭代总显示当前的行号,当你使用了分页时也能看到正确的行号,比如 第一页 10-20 , 第二页他就是 21-30 。
<h:dataTable id="mytable" binding="#{myBean.myTable}" var ="myList">
<h:outputText value="#{myTable.rowIndex}" />
</h:dataTable>


public class MyPageCode {

private HtmlOutputText myOutputText;

public HtmlOutputText getMyOutputText(){
if(myInputText == null){
// 从 ViewRoot 开始搜索 ID 为 myInputText 组件并赋值。
UIComponent root = FacesContext.getCurrentInstance().getViewRoot();

myOutputText= (HtmlInputText) findInDeep(root,"myOutputText");

}

return myOutputText;

}

public void setMyInputText(HtmlInputText input){
this.myInputText = input;
}

}

private UIComponent findInDeep(UIComponent root, String id ){
Iterator kids = root.getChildrenAndFacets();
while( kids.hasNext()){
UIComponent current = (UIComponent) kids.next();
if( id.equals(current.getId())
return current;
current = findInDeep(current,id);
if(current !=null)
return current;
}
return null;

}
JSF_datatable
<h:dataTable id="tableRows" rowClasses = "row1,row2,row3,row4,row5,row6,..." />
你可以这样 添加 rowClasses 属性,它会为每一行轮流选择一个 rowXX,也就是 第一行 class=用 row1, 第‘二行 class=用 row2 ,row6 用完了之后重新从 row1 开始。
列的 columnClasses 也是一样的。
也就是你可以这样:
<h:dataTable id="tableRows" columnClasses= "w1,w1,w1,w1,w1,w1,w1,w1,w1,W2,w1,w1,w1" />
因为你已经知道了 第十列, 或者你不知道是第十列那就用 表达式,让这个表达式计算后返回的字符串 就像 "w1,w1,w1,w1,w1,w1,w1,w1,w1,W2,w1,w1,w1" 一样就行了.
managed-bean之间如何传递参数

在faces-config.xml中,如下两个bean,LoginBean为验证用户登陆,BlogAddBean为添加文章,现在想把用户登录时的id传递给blog.BlogAddBean

<managed-bean>
<managed-bean-name>login</managed-bean-name>
<managed-bean-class>net.fanq.user.LoginBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>blogadd</managed-bean-name>
<managed-bean-class>net.fanq.user.BlogAddBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>


//两种解决方法:
//1.Value Binding
//2.Variable Resolver

在BlogAddBean.java文件中

FacesContext fc = FacesContext.getCurrentInstance();

LoginBean loginBean = (LoginBean)fc.getApplication().createValueBinding("#{login}").getValue(fc);

//注释掉的为第二种方法
//LoginBean loginBean = (LoginBean)fc.getApplication().getVariableResolver().resolveVariable(fc,"login");


private int userid = loginBean.getUserid();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值