当前位置: 代码迷 >> JavaScript >> JSF参数传递形式说明
  详细解决方案

JSF参数传递形式说明

热度:369   发布时间:2012-10-30 16:13:36.0
JSF参数传递方式说明
先说明一种:
-----------------------------------------
<h:commandLink value="整理材料 " action="#{documentPressBackingBean.cleanDatum}" target="HideFrame">
 <f:param name="documentArchiveId" value="#{pre.documentArchiveId}"></f:param>
</h:commandLink>
<h:outputLabel styleClass="icoArrange" id="show">
</h:outputLabel>
<h:commandButton value="整理材料" action="#{documentPressBackingBean.cleanDatum}" 
onclick="this.form.target='HideFrame';" style="display:none">
<x:updateActionListener property="#
{documentPressBackingBean.documentArchiveId}" value="#{pre.documentArchiveId}" />
</h:commandButton>

------------------------------------------------

以下是其他方式:

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

页面到Bean的参数传递
页面中设置参数:
<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对象取值
HttpServletRequest request = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();    
        request.getParameter("name");   


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

(3)通过配置文件进行Bean的属性值注入,在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)
<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)
<h:outputLink value="param2.jsf?name=chen&id=123456">    
                <h:outputText value="Test4"></h:outputText>    
    </h:outputLink>   

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

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


JSF参数传递方式之二:Backing Bean 与 h:inputHidden标签
Backing Bean

import javax.faces.component.UIInput;    
import javax.faces.component.UIOutput;    
   
public class BackingBean    
{    
   
    private UIOutput idComponent;    
 
    public UIOutput getIdComponent()    
    {    
        return idComponent;    
    }    
   
    public void setIdComponent(UIOutput idComponent)    
    {    
        this.idComponent = idComponent;    
    }     
} 


页面到Bean的参数传递
页面中设置参数:
<h:form>    
            <h:inputHidden value="123456" binding="#{backingBean.idComponent}"></h:inputHidden>    
            <h:commandButton value="登录" action="#{paramBean.login}"></h:commandButton>    
</h:form>   

后台取参数:
FacesContext context = FacesContext.getCurrentInstance();    
        BackingBean backBean =(BackingBean)context.getApplication().getVariableResolver().resolveVariable(context,"backingBean");//该方法已经过时    
        BackingBean bean =(BackingBean)context.getApplication().getELResolver().getValue(context.getELContext(), null, "backingBean");    
        backBean.getIdComponent().getValue();    
        bean.getIdComponent().getValue();   

FacesContext context = FacesContext.getCurrentInstance();

2.2页面到页面的参数传递
页面中设置参数:
<h:form>    
        <h:inputHidden value="123456"            binding="#{backingBean.idComponent}"></h:inputHidden>    
        <h:commandButton value="Test5"   action="param"></h:commandButton>    
        <h:commandLink value="Test6" action="param"></h:commandLink>    
    </h:form> 

注意:h:outputLink 标签不能使用该方式传递参数!
页面中取参数:
<h:outputText value="#{backingBean.idComponent.value}"></h:outputText>  


JSF参数传递方式之三:通过session(application)对象传递

页面到Bean的参数传递
页面中设置参数:
<h:form>    
            <%session.setAttribute("name","hujilie"); %>    
            <%application.setAttribute("id","123456"); %>    
            <h:commandButton value="Test8" action="#{paramBean.test2}"></h:commandButton>    
            <h:commandLink  value="Test8" action="#{paramBean.test2}"></h:commandLink>    
    </h:form> 
 
后台取参数:
FacesContext context = FacesContext.getCurrentInstance();    
        Map sessionMap =context.getExternalContext().getSessionMap();    
        Map applicationMap = context.getExternalContext().getApplicationMap();    
HttpSession session =(HttpSession) context.getExternalContext().getSession(true);    
ServletContext application = (ServletContext)context.getExternalContext().getContext();    
        sessionMap.get("name");    
        applicationMap.get("id");    
        session.getAttribute("name");    
        application.getAttribute("id"); 

页面到页面的参数传递
页面中设置参数:
<h:form>    
            <%session.setAttribute("name","hujilie"); %>    
            <%application.setAttribute("id","123456"); %>    
            <h:outputLink value="param2.jsf">Test10</h:outputLink>    
    </h:form> 

页面中取参数:
<h:outputText value="#{sessionScope.name}"></h:outputText><br>    
    <h:outputText value="#{applicationScope.id}"></h:outputText>   


JSF参数传递方式之四:f:attribute标签传递

页面到Bean的参数传递
页面中设置参数:
<h:form>    
            <h:commandButton action="#{paramBean.test3}" value="Test11" actionListener="#{paramBean.changeName}">    
                <f:attribute name="name" value="hujilie"/>    
            </h:commandButton>    
            <h:commandLink action="#{paramBean.test3}" value="Test12" actionListener="#{paramBean.changeName}">    
                <f:attribute name="name" value="hujilie"/>    
            </h:commandLink>    
    </h:form> 


后台取参数:
public void changeName(ActionEvent e)    
    {    
        UIComponent component = e.getComponent();    
        Map<String, Object> map = component.getAttributes();    
        setName((String)map.get("name"));    
    }  


JSF参数传递方式之五:f:setPropertyActionListener 标签传递

页面到Bean的参数传递
页面中设置参数:
<h:form>    
            <h:commandButton action="#{paramBean.test3}" value="Test14">   
                <f:setPropertyActionListener value="hujilie" target="#{paramBean.name}"/>    
            </h:commandButton>    
            <h:commandLink action="#{paramBean.test3}" value="Test15">    
                <f:setPropertyActionListener value="hujilie" target="#{paramBean.name}"/>    
            </h:commandLink>    
    </h:form>   

后台取参数:直接使用属性的值。
本文来自CSDN博客http://blog.csdn.net/linwei_1029/archive/2010/03/17/5384745.aspx
  相关解决方案