原本以为JSF还挺好用的,但是最后发现好多问题,不知道各位是怎么解决的
1.页面跳转问题。就是页面导航的navigation-rule配置,加不加<redirect/>重定向。
  加<redirect/>重定向的时候,该页面的URL是正确的,但是F5刷新就不起作用了
  不加<redirect/>重定向的时候,该页面的URL是上一个页面的URL,F5刷新执行的是前一次的操作,可以刷新,但是还是有提示是否重新提交页面的对话框。这页面的URL一致性和刷新问题怎么实现的啊?2.jsf如何初期化画面问题。jsf页面后台的backing Bean的初期化事件怎么调用。现在的做法是在链接到该页面时action调用的是该Bean的init方法。但是这样收藏页面或者只是输入该页面的URL访问时,该页面Bean的init方法不能被调用。这块又是怎么实现的呢,就没有类似于.NET中的Page_Load方法?那这也太难用了吧。3.预防重复性提交的问题又是怎么避免的?有没有类似于.NET中的!IsPostBack的方法。

解决方案 »

  1.   

    2.
    那要看你的bean的scope,是request的话每次请求都生成一个实例,是无参构造方法,不是init如果是session的话,第一次请求生成一个实例,一直存在于session中事件驱动跟.net很像,但我就是觉得比.net的好,好用
      

  2.   

    回1楼
    我的bean是request的,每个页面request的Beand里对应一个注入的session的Info,如果初期化事件是在
    该Bean的无参构造方法里面执行,注入的info就是null的,先执行的构造方法,再执行info的set方法,这样也不行啊。
    同时,如果是<redirect/>重定向的话,无参构造方法里面通过<f:param传过来的参数,在这边通过RequestParameterMap取值时已经取不到了,该Bean的构造方法是在用的时候才执行的,这时已经重定向,request里面的参数就没了。
    难道这种方法不是这样用的。
      

  3.   

    不喜欢JSF-没有任何理由,就是不喜欢,呵呵
      

  4.   

    用jsf的人这么少么,JSF页面初始化数据的方法(实际上是初始化它的BackingBean,让它依据不同的条件(参数)装载数据):
     1.在BackingBean的无参数的构造函数中初始化(如读取向它传递的Request等值、读取数据库或文件中持久的数据)缺点:必须放弃ManageredProperty的注入,用Request来传递参数。因为构造函数先执行,然后再来注入属性值。优点是:简单,易用,不易出错。且可以直接用标准Url方式调用,如/ok.jsf?name=john,与其它的java web程序好兼容。
     2.利用ManageredBean的ManagerdProperty的值注入。包括注入Request参数 如#{parap.name}.在get或Set某一属性时,依据传递的参数来初始化数据。(在set某个属性时初始化,容易产生有些属性还没有被注入初始化,而在get某个属性时初始化数据,又有可能该属性未被调用,则无法完成初始化工作了。)
     3.在代码Action中转向前获取该页面的BackingBean,来初始化它。缺点是:依赖于代码Action,不能直接用URL。容易产生BackingBean中的相互依赖。
     4.用ActionListener侦听某个Action执行后,再来解析Request参数或jsf部件值,来加载数据。感觉就1,3还可以用,但是都不太好,哎~~~。这jsf真难用