Simple Thinking
24岁,开始一个新的年月
-
JSF:几个心得
2007/03/18
JSF页面的生命周期自动维护,是以表单的post提交为主要形式的。
页面->分解页面为组件树->验证->更新数据对象值->业务逻辑处理->重绘组件树为页面->返回HTML流。
在这个过程中,如果我们不加入中途的事件处理和自定义验证器转换器,那么在业务逻辑处理之前,数据的传送对我们是no-touch的!
这样的自动化很方便,但是JSF的麻烦也就在这个地方,这个地方的不可控,导致了绝大部分的JSF错误,尤其是莫明其妙的错误,除非你很了解这个过程,否则对着错误也就只能干瞪眼。举例说明,分页的问题,一般分页我们用dataTable+dataScroll,很简单,但是如果页面是这种形式http://localhost/f.faces?g=123,那么分页的时候你会发现g=123丢了!第二页直接跳到http://localhost/f.faces去了。一定要在dataScroll的那个表单中老老实实的把g=123加上成为一个hidden域,而且注意,最好不要用<h:inputHidden />,否则这个hidden域的名字就叫做FORM:g,而不是g!
由于JSF的这种post表单提交形式,导致我们必须要在所有出现的表单中加上页面的get参数值,否则就会出现莫明其妙的错误。为什么JSF就不能智能化一点呢?包括navigation,也不能加上get值,只能跳到f.faces,所以现在我在跳转的时候有时都不用navigation,直接在处理完逻辑之后redirect回原来的页面。这样就失去了JSF的本意了。
不知道是我的理解有误,还是JSF本身就有这样的问题。这些暂时先这样解决着,等这阵完了,统一整理一下。








