页面中设置参数:
- <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页面传递参数给托管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