JSF参数传递方式之一:f:param标签

 

JSF参数传递方式之一:f:param标签  

页面到Bean的参数传递
页面中设置参数:
Java代码
  1. <h:form>   
  2.             <h:commandLink value="Test2" action="#{paramBean.test}">   
  3.                 <f:param name="name" value="zhang"></f:param>   
  4.                 <f:param name="id" value="123456"></f:param>   
  5.             </h:commandLink>   
  6. </h:form>  
<h:form>    <h:commandLink value="Test2" action="#{paramBean.test}">     <f:param name="name" value="zhang"></f:param>     <f:param name="id" value="123456"></f:param>    </h:commandLink> </h:form>  

注意:这里只能使用h:commandLink标签,而不能使用h:commandButton标签!
后台取参数:
(1) 通过Request对象取值
Java代码
  1. HttpServletRequest request = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();   
  2.         request.getParameter("name");  
HttpServletRequest request = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();         request.getParameter("name"); 

        (2)通过RequestParameterMap取值
Java代码
  1. Map varMap = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();   
  2.         varMap.get("id");  
Map varMap = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();         varMap.get("id"); 

        (3)通过配置文件进行Bean的属性值注入,在Bean的方法中直接使用属性
Java代码
  1. <managed-bean>   
  2.   <managed-bean-name>paramBean</managed-bean-name>   
  3.   <managed-bean-class>com.spg.bean.ParamBean</managed-bean-class>   
  4.   <managed-bean-scope>request</managed-bean-scope>   
  5.   <managed-property>   
  6.    <property-name>id</property-name>   
  7.    <property-class>java.lang.String</property-class>   
  8.    <value>#{param.id} </value>   
  9.   </managed-property>   
  10. </managed-bean>  
<managed-bean>   <managed-bean-name>paramBean</managed-bean-name>   <managed-bean-class>com.spg.bean.ParamBean</managed-bean-class>   <managed-bean-scope>request</managed-bean-scope>   <managed-property>    <property-name>id</property-name>    <property-class>java.lang.String</property-class>    <value>#{param.id} </value>   </managed-property> </managed-bean>

页面到页面的参数传递
页面中设置参数:
(1)
Java代码
  1. <h:outputLink value="param2.jsf">   
  2.                 <h:outputText value="Test4"></h:outputText>   
  3.                 <f:param name="name" value="chen"></f:param>   
  4.                 <f:param name="id" value="123456"></f:param>   
  5.     </h:outputLink>  
<h:outputLink value="param2.jsf">     <h:outputText value="Test4"></h:outputText>     <f:param name="name" value="chen"></f:param>     <f:param name="id" value="123456"></f:param>  </h:outputLink> 

(2)
Java代码
  1. <h:outputLink value="param2.jsf?name=chen&id=123456">   
  2.                 <h:outputText value="Test4"></h:outputText>   
  3.     </h:outputLink>  
<h:outputLink value="param2.jsf?name=chen&id=123456">     <h:outputText value="Test4"></h:outputText>  </h:outputLink>

注意:以上两种方法,不能同时使用!
页面中取参数:
(1) 使用JSF的值表达式
Java代码
  1. <h:outputText value="#{param.name}"></h:outputText>    
  2.     <h:outputText value="#{param.id}"></h:outputText>  
<h:outputText value="#{param.name}"></h:outputText>   <h:outputText value="#{param.id}"></h:outputText>

(2) 使用JSP的表达式
Java代码
  1. <%=request.getParameter("name")%>   
  2.     <%=request.getParameter("id")%>

 

另外还见到一种方式:如下但没有实验过

从JSF页面传递参数给托管Bean
虽然利用h:commandLink 和h:commandButton组件,可以通过action和actionListener来触发托管Bean中的方法,但是不能向这些方法中传递参数。对于动态传递参数,不是不可以实现,这点可以通过使用f:attribute来实现。而且f:attribute也可以很好的和actionListener联合使用。
例子:

<h:commandLink actionListener="#{myBean.action}">
        
<f:attribute name="attrname1" value="attrvalue1" />
        
<f:attribute name="attrname2" value="attrvalue2" />
        ...   
        
<h:outputText value="Click here" />
    
</h:commandLink>
    
    
<h:commandButton value="Press here" actionListener="#{myBean.action}">
        
<f:attribute name="attrname1" value="attrvalue1" />
        
<f:attribute name="attrname2" value="attrvalue2" />
        ...
    
</h:commandButton>

这些属性可以通过父组件的getAttributes()方法取到,父组件可以通过传递给actionListener的ActionEvent实例取到



public void action(ActionEvent event) 
    
...{   
        String attrvalue1 
= (String) event.getComponent().getAttributes().get("attrname1");
        String attrvalue2 
= (String) event.getComponent().getAttributes().get("attrname2");
        ...
    }

变量attrvalue1和attrvalue2包含从f:attribute set进来的值。
另一个欠文雅的方式就是通过f:param组件来传值,这个只是对h:commandLink起效。



<h:commandLink action="#{myBean.action

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值