前沿:使用JSF的难兄难弟们,可能都为JSF中get请求郁闷过。。因为真正意义上的数据提交,在JSF中全部通过post进行。所以get请求,在JSF生命周期中处理确实有些蹩脚。。下面我给大家简单列举几种方式。
Page部分:
<h:commandButton(/Link也可以) value="提交(/浏览)" actionListener="#{homeAction.lookUpListener}" action="#{homeAction.lookUpAction}">
<f:param id="id" name="id" value="1000"/>
<!-- 如果你想基于a4j下异步提交参数 -->
<!--
<a4j:actionparam name="id" value="1000" id="id"></a4j:actionparam>
-->
</h:commandButton(/Link)>
以上()中为可替换部分,你可以使用按钮,当然可以使用连接,不过他们是command类型。
静态get链接:
<h:outputLink value="...."...><f:param id="id" name="id" value="1000"/></h:outputLink>
下面给大家介绍一些,如果如何使用参数。
1)command组件中使用参数。
public void lookUpListener(ActionEvent event){
UIParameter paramId=(UIParameter)event.getComponent().findComponent("id");
System.out.print(paramId.getValue().toString());
.....
}
public String lookUpAction(){
HttpServletRequest request = FacesContext.getCurrentInstance().getExternalContext().getRequest()
Integer id = request.getParameter("id");
}
第一,我们把<f:param>作为组件从触发事件的按钮或者链接中查找。以组件的形式处理,这种方式可以接受考虑。当然最好在listener中处理。
第二,我们使用http的方式去考虑,毕竟JSF生命周期的处理,还是基于servlet容器。但是需要走些弯路,从JSF应用容器上下文,获取servlet或者其他三方上下文,然后获取请求。。得到request,那么就很容易获取请求参数了。其实无论是command还是output组件,它的提交数据均可以在http中获取,但是command组件还可以通过listener事件去侦听。
2)对于http--get请求
在JSF中get请求处理,也无外乎那么一套,如果你是在找不到更好的方案,那你就回归到servlet--http普通的web模式。JSF基于servlet当然能够在任何时候获取http的数据。
对于静态get请求如:http://***.com/home.jspx?id=1000,你可以参看上面的<h:outputLink>
如果你知道JSF的生命周期,那么一切都那么简单。如果你不太清楚,那么就简单的认为在渲染页面的之前,必须首先实例化后台bean,在实例化bean的时候,bean可以获取请求中的数据。。。只要bean不脱离JSF应用管理器,那么http等所有servlet、jsp能干的事情,JSF都给你提供了接口。。。
public class HomeAction {
/**
*查询字符串
*/
private Integer id;//get,setter方法别忘了。
public HomeAction(){
//如果JSF准备渲染页面,那么它肯定需要执行构造参数,前提是你定义了这个默认构造函数
HttpServletRequest request = FacesContext.getCurrentInstance().getExternalContext().getRequest()
id = request.getParameter("id");//自己进行类型转换
}
}
此时id的值被更新,如果id参数是通过command组件提交的,这个id可以在“更新模型”生命周期之后的阶段周期中被使用:如调用listener方法,action驱动等等。
3)seam中使用参数,依赖注入是神话
无论你通过何种output/command等传递参数导航,均可使用如下模板:
......
@requestParamter
private Integer id;//自动类型转化,但是你需要自己祈祷类型正确
public void lookUpAction(){
//此处可以直接使用id,因为生命周期中此id已经被seam拦截并通过serlvet处理。
log.info("id:"+id);
}
如果你对生命周期不太理解,请参见本人的博客。
分享到:
相关推荐
例如,`#{param['myParam']}`可以用来获取请求参数,而`#{sessionScoped.bean.property}`则可以访问会话中的属性。 3. **事件参数传递**:JSF支持事件驱动的编程模型,如`valueChange`事件。当用户界面组件的值发生...
在JSF(JavaServer Faces)框架中,参数...总结来说,JSF中参数传递的核心在于`f:param`标签的使用,以及在后台通过不同方式获取这些参数。通过熟练掌握这些技巧,开发者能够更好地在JSF应用中实现数据交互和页面导航。
在每个请求中创建新的Request Bean是安全的,但如果多个请求共享同一个Bean,可能会引发混乱。 通常,JSF页面间的参数传递应该遵循以下原则: - 避免直接操作`HttpServletRequest`和`HttpSession`,以保持代码的...
示例代码显示了如何从请求参数中获取文件名,然后调用`FileUtils.downloadFile`方法。 7. **JSF与JSP的集成**: 在JSF页面中,可以利用`<h:outputLink>`组件结合JSP页面来实现文件下载。`<h:outputLink>`的`value`...
7. **FacesContext**:这是JSF的核心类,它提供了与当前请求相关的所有信息,包括请求参数、视图状态、消息等。 8. **转换和验证**:JSF允许在客户端和服务器端进行数据验证,确保输入的数据符合预期格式。同时,...
- **套用请求值(Apply Request Values)**:在这个阶段,每个JSF组件都会从HTTP请求中获取相应的参数值,并更新组件的属性。如果组件设置了`immediate="true"`,则会立即处理任何相关事件,并跳过后面的阶段直接...
FacesContext是JSF框架中的核心类,它封装了与请求相关的所有信息,包括请求参数、视图状态、消息等。开发人员可以通过FacesContext获取当前请求的状态和执行各种操作。 4. **Managed Beans** Managed Beans是JSF...
在每个阶段,JSF都会执行特定的任务,如解析请求参数、执行验证规则、更新Bean属性等。 ### 自定义标签库 JSF允许开发者创建自己的组件库,通过定义新的UI组件标签来扩展其功能。这些标签可以封装复杂的逻辑,提高...
- **套用请求值(Apply Request Values)**:在这个阶段,每个JSF组件都会从HTTP请求中获取相应的参数值,并更新组件的值。如果组件设置了`immediate="true"`,则会立即处理任何关联的事件,并跳过后续阶段直接绘制...
2. **应用请求值和验证**:框架将请求参数应用到组件的值,然后进行数据验证。 3. **更新模型值和处理事件**:如果验证成功,JSF会更新模型对象的值,并处理任何由用户触发的事件。 4. **呈现响应**:最后,JSF生成...
JSF遵循一系列预定义的生命周期阶段来处理HTTP请求: 1. **恢复视图**: JSF查找与请求关联的视图状态。 2. **应用请求值**: 用户输入的数据被绑定到Managed Bean的属性。 3. **过程验证**: 对输入数据进行验证,如果...
JSF的配置文件默认为`faces-config.xml`,但可以通过在`web.xml`中设置`javax.faces.CONFIG_FILES`参数来自定义配置文件的位置和名称,如: ```xml <param-name>javax.faces.CONFIG_FILES <param-value>/WEB-...
在处理CRUD操作时,可以通过FacesContext获取HTTP请求参数,或者设置响应信息。 8. **AJAX支持**: JSF提供了内置的AJAX支持,通过f:ajax标签可以实现部分页面的异步刷新,这样在执行CRUD操作后,只有受影响的部分...
在JSF框架中,EL与Faces Context紧密集成,可以方便地访问请求参数、会话属性、应用程序范围内的数据,甚至可以直接调用Managed Bean的方法。例如,如果你有一个Managed Bean叫做`UserBean`,它有一个返回用户信息的...
2. **分页参数**:在HTTP请求中,需要传递分页参数,如当前页码和每页大小。这些参数可以通过URL查询字符串或隐藏表单字段传递。 3. **性能优化**:在数据库层面使用`LIMIT`和`OFFSET`(或等效的SQL语句)来只获取所...
- **FacesContext**:JSF应用中的上下文对象,它提供了对当前请求的访问,如获取请求参数、发送消息、导航等。 - **转换和验证**:JSF允许自定义数据转换和验证规则,确保用户输入符合业务逻辑要求。 - **Faces ...
在每个阶段,JSF都会执行特定的任务,如解析请求参数、验证输入数据、更新模型对象等。 **Facelets** 是JSF推荐的视图表示技术,它是一种XML-based的模板语言,用于创建JSF组件的视图。Facelets提供了模板继承、...
10. **Faces Servlet**:JSF框架的核心Servlet,负责处理所有JSF相关的HTTP请求,解析请求参数,调用适配器进行渲染。 总的来说,JSF+Faces+API帮助文档提供的是一份详尽的参考资料,涵盖了JSF框架的各个方面,包括...
- `getRequest()`方法返回代表当前正在处理的HTTP请求的`ServletRequest`对象,包含了请求的所有信息,如请求参数、头信息等。 3. **获取ServletResponse对象**: - `getResponse()`方法返回当前正在构建的响应的...