JSF提供了四种机制从UI向服务器传递参数:
1.方法表达式参数
2.<f:param>
3.<f:setPropertyActionListener>
4.<f:attribute>
从JSF2.0开始,方法表达式可以带参数,如:
<h:commandLink action="#{localeChanger.changeLocale('de')}">
<f:param>标签能够将一个参数添加到组件:
<f:param name="name" value="value">
其关联的组件类型不同表现也不同。如果为<h:outputText>则使用参数来填充占位符,如果添加f:param标签到命令组 件,JSF会将参数值作为请求参数传递到服务器。服务器端可以按如下方式访问参数:
/*这是第一种取得参数的方法
FacesContext context=FacesContext.getCurrentInstance();
Map<String,String> params=context.getExternalContext().getRequestParameterMap();
String param=params.get("name");
/*这是第二种取得参数值的方法
HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
String param=request.getParameter("id");
这是第三种取得参数的方法
UIComponent com = e.getComponent();
UIParameter param = (UIParameter) com.findComponent("id");
String param=param.getValue();
<f:attribute>标签设置组件的属性。
<f:attribute name="name" value="value">
服务器端可以按如下方式访问参数:
public void listener(ActionEvent event)
{
UIComponent component=event.getComponent();
Map<String,Object> attributes=component.getAttributes();
Object attribute=attributes.get("name");
}
使用<f:setPropertyActionListener>标签,JSF在后端支撑bean中设置属性:
<f:setPropertyActionListener target="#{bean.attribute}" value="value"/>