一、背景阐述
页面利用dataTable显示多行记录,一行记录记录着一个用户的信息,其中用户状态的那个column用<h:selectOneMenu>显示,以便可以任意更改其状态。
所以,现在就需要实现这样一个功能:当一个用户的状态改变了,需要将这个用户的id传到后台bean里,以便知道是哪个用户的状态改变了,然后在后台bean里对这个用户的信息做相应的处理。
二、实现方法
方法一、利用<h:selectOneMenu>&<f:attribute>实现实时从页面传参到back bean功能
1.页面代码:
2.后台bean里的代码:
方法二、利用<h:selectOneMenu>&<h:inputHidden>实现实时从页面传参到back bean功能
1.页面代码:
2.后台bean里的代码:
三、两种方法的比较
以上两种方法都可以实现实时传参的功能,不同的是,第一种方法是把userId作为<h:selectOneMenu>的一个属性,当一个user的状态改变以后,利用ValueChangeEvent得到<h:selectOneMenu>的属性,从而得到userId.而第二种方法,每个单元格里有一个form表单,当一个user的状态改变以后,页面只会提交value改变的那个<h:selectOneMenu>所在的表单,再从后台bean里,利用HtmlInputHidden得到这个表单中的<h:inputHidden>中的value,即改变状态的user的id。
页面利用dataTable显示多行记录,一行记录记录着一个用户的信息,其中用户状态的那个column用<h:selectOneMenu>显示,以便可以任意更改其状态。
所以,现在就需要实现这样一个功能:当一个用户的状态改变了,需要将这个用户的id传到后台bean里,以便知道是哪个用户的状态改变了,然后在后台bean里对这个用户的信息做相应的处理。
二、实现方法
方法一、利用<h:selectOneMenu>&<f:attribute>实现实时从页面传参到back bean功能
1.页面代码:
- <h:form>
- <t:dataTable id="custRecordList" var="user" value="#{backbeanName.custRecordList}"
- styleClass=" " footerClass=" " headerClass=" " columnClasses="" rowClasses=""
- align="center" cellpadding="4" cellspacing="0" border="0" rows="45">
- <t:column>
- <f:facet name="header">
- <h:outputText value="User Status" />
- </f:facet>
- <h:selectOneMenu immediate="true" value="#{user.userStatus}"
- valueChangeListener="#{backbeanName.getUserNewStatus}" onchange="this.form.submit();">
- <f:selectItems value="#{backbeanName.userStatusSelectItems}"/>
- <f:attribute name="userId" value="#{user.userId}"/>
- </h:selectOneMenu>
- </t:column>
- </t:dataTable>
- <t:dataScroller id="scroller" for="custRecordList" style="position:relative;left:40px"
- fastStep="10" pageCountVar="pageCount" pageIndexVar="pageIndex" paginator="true"
- paginatorMaxPages="10" paginatorActiveColumnStyle="font-weight:bold;text-decoration:none;"
- renderFacetsIfSinglePage="false">
- <f:facet name="first">
- <t:graphicImage id="firstImg" url="/shared/images/pagination/first.gif" border="1" />
- </f:facet>
- <f:facet name="last">
- <t:graphicImage id="lastImg" url="/shared/images/pagination/last.gif" border="1" />
- </f:facet>
- <f:facet name="previous">
- <t:graphicImage id="prevImg" url="/shared/images/pagination/previous.gif" border="1" />
- </f:facet>
- <f:facet name="next">
- <t:graphicImage id="nextImg" url="/shared/images/pagination/next.gif" border="1" />
- </f:facet>
- <f:facet name="fastforward">
- <t:graphicImage id="ffImg" url="/shared/images/pagination/fforward.gif" border="1" />
- </f:facet>
- <f:facet name="fastrewind">
- <t:graphicImage id="frImg" url="/shared/images/pagination/fbackward.gif" border="1" />
- </f:facet>
- </t:dataScroller>
- </h:form>
- public class BackBean {
- public void getUserNewStatus(ValueChangeEvent e){
- String userStatus=e.getNewValue();//得到user的新状态
- String userId=e.getComponent().getAttributes().get("userId").toString();//得到改变状态的user的id
- System.out.println("userStatus="+userStatus);
- System.out.println("userId="+userId);
- }
- }
1.页面代码:
- <t:dataTable id="custRecordList" var="user" value="#{backbeanName.custRecordList}"
- styleClass=" " footerClass=" " headerClass=" " columnClasses="" rowClasses=""
- align="center" cellpadding="4" cellspacing="0" border="0" rows="45">
- <t:column>
- <f:facet name="header">
- <h:outputText value="User Status" />
- </f:facet>
- <h:form>
- <h:selectOneMenu immediate="true" value="#{user.userStatus}"
- valueChangeListener="#{backbeanName.getUserNewStatus}"
- onchange="this.form.submit();" style="width:100px;">
- <f:selectItems value="#{backbeanName.userStatusSelectItems}"/>
- </h:selectOneMenu>
- <h:inputHidden name="userId" value="#{user.userId}"/>
- </h:form>
- </t:column>
- </t:dataTable>
- public class BackBean {
- private HtmlInputHidden htmlInputHidden;
- public void getUserNewStatus(ValueChangeEvent e){
- String userStatus=e.getNewValue();//得到user的新状态
- String userId=htmlInputHidden.getValue().toString();//得到改变状态的user的id
- System.out.println("userStatus="+userStatus);
- System.out.println("userId="+userId);
- }
- }
以上两种方法都可以实现实时传参的功能,不同的是,第一种方法是把userId作为<h:selectOneMenu>的一个属性,当一个user的状态改变以后,利用ValueChangeEvent得到<h:selectOneMenu>的属性,从而得到userId.而第二种方法,每个单元格里有一个form表单,当一个user的状态改变以后,页面只会提交value改变的那个<h:selectOneMenu>所在的表单,再从后台bean里,利用HtmlInputHidden得到这个表单中的<h:inputHidden>中的value,即改变状态的user的id。