在一个主页面中用了frameset,分为左右两个frame。
两个frame中有各自单独的操作,对应各自的backing bean.
这两个操作部分代码的分别如下:
左边:
<h:commandLink action="#{tBacker.selectNode}">
<f:param name="nodid" value="#{tBacker.index}"></f:param>
</h:commandLink>
右边:
<h:commandButton id="ima2" onclick="return checkForm(this.form)" onmouseover="this.src='./image/cx_4_1.gif'" onmouseout="this.src='./image/cx_4.gif'" style="cursor:hand" image="./image/cx_4.gif" action="#{rowDataQuery.dataQueryByButton}"/>
绑定bean如下:
<managed-bean>
<managed-bean-name>tBacker</managed-bean-name>
<managed-bean-class>
com..TBacker
</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>rowDataQuery</managed-bean-name>
<managed-bean-class>com.RowDataQuery</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>问题如下:
  当两边的操作相互进行时,第一次点击commandLink 或commandButton 时,只是页面刷新一下,而不调用这个action方法,我在两个action中打断点,根本没有进入,用h:messages也没有任何错误信息,第二次再点击就能执行方法了。
  现在这种情况没有一个固定的规律,能不能调用这个action方法都要靠“碰运气”,把commandLink 换成valuechangelistener,一边或两边都加上immediate="true"都会有这样的情况出现。
  谁能告诉我这是什么原因?我应该怎么解决这个问题?
  这个问题要是不能解决就要放弃使用JSF了,各位高手来帮帮忙吧!解决后马上给分!

解决方案 »

  1.   

    这是由于你所调用的方法总是在构造函数之后执行的结果,如果你将对象的范围都设在session中就不会出现这个问题了,否则还要在构造函数中加一些判断
      

  2.   

    这个说不准哪里有问题。好好检查一下
    1。左边:
    <h:commandLink action="#{tBacker.selectNode}">
    <f:param name="nodid" value="#{tBacker.index}"></f:param>
    </h:commandLink>
    //getIndex和setIndex都写上没有2。 onclick="return checkForm(this.form)"检查下这个onclick有没问题,或者去掉它测试一下action行不行。
    3。检查下web.xml的jsf配置允许了js之类的没
      

  3.   

    经测试,都放在session里,问题依然存在。
    getIndex和setIndex都写上了,这个没有问题。
    可以进入onclick事件,但是还是不能执行action。
    ‘允许了js之类’是什么意思啊?另外,点击commandLink 或commandButton,执行完action中的操作后,所在的页面会刷新一次。问题是不是与这有关啊?
      

  4.   

    selectNode方法是怎麽寫的?
    加event參數了沒有??
      

  5.   

    h:commandLink 
    h:commandButton 最好不要出现在一个网页里,要么统一一下都h:commandButton
      

  6.   

    tBacker.selectNode 和 rowDataQuery.dataQueryByButton 方法有问题 你看下这两个方法是否存在错误仔细检查下
      

  7.   

    刚开始使用基本都会碰到这个问提,一般出现这个问题原因是两个
    1.状态记录参数应该设置为客户端记录,不能设置为服务器,否则会经常不触发事件;
    2.如果使用<h:commandLink>,就不能同时使用其action和value属性,否则会出现触发异常,如果想使用action最好用<h:commandButton>
      

  8.   

    web.xml
    <!--JSF的基础配置 -->
    <listener>
    <listener-class>com.sun.faces.config.ConfigureListener</listener-class>
    </listener>
        <context-param>
            <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
            <param-value>client</param-value>
        </context-param>
      

  9.   

    你不理解jsp运行机制,他们有个优先级别,bean 的get方法优先级别最高,当那些方法运行完毕后,才是你的commandLink 和commandButton 上的actionListener帮定的方法,有可能你在第一不就取不到值,所以的你事件就不执行,或偶尔执行(获取到程序运行的条件值)