commandLink在重新渲染后停止工作

commandLink在重新渲染后停止工作

本文介绍了a4j:commandLink在重新渲染后停止工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我创建了这个测试案例,隔离了我的问题.一旦轮询执行ajax更新,就不会执行a4j:commandLink操作.如果我们在重新渲染民意调查之前关闭modalPanel,则会执行该操作.

I have created this test case that isolates my problem. The a4j:commandLink action is not executed once the poll does an ajax update. It is executed if we close the modalPanel before the reRender of the poll.

有什么建议吗?预先感谢.

Any suggestion? Thanks in advance.

test.xhtml:

test.xhtml:

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"
xmlns:a4j="http://richfaces.org/a4j" xmlns:rich="http://richfaces.org/rich" xmlns:fn="http://java.sun.com/jsp/jstl/functions" xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:fnc="http://eyeprevent.com/fnc">
<a4j:outputPanel id="testing">
<rich:modalPanel id="examinationPanel" autosized="true" width="450" rendered="#{test.condition2}">
    <f:facet name="header">
        <h:outputText value="View Examination Images" />
    </f:facet>
    <f:facet name="controls">
        <h:panelGroup>

            <a4j:form>

                <a4j:commandLink action="#{test.close}">
                    <h:graphicImage value="/images/modal/close.png" id="hideExaminationPanel" styleClass="hidelink" />
                </a4j:commandLink>
            </a4j:form>
            <rich:componentControl for="examinationPanel" attachTo="hideExaminationPanel" operation="hide" event="onclick" />

        </h:panelGroup>
    </f:facet>


    <a4j:form>

        <h:panelGrid columns="1" id="timeoutText">
            <h:outputText id="remainingtime" value="condition1" rendered="#{test.condition1}" />
            <h:outputText id="timer" value="condition2" rendered="#{test.condition2}" />

        </h:panelGrid>

        <a4j:poll id="poll" interval="5000" enabled="#{test.poll}" reRender="poll,timeoutText" />



    </a4j:form>
</rich:modalPanel>

关联

TestBean.java

TestBean.java

import org.apache.log4j.Logger;
public class TestBean {
private boolean condition1=false;
private boolean condition2=true;
private boolean poll=true;

public void close(){
Logger.getLogger("com.eyeprevent").info("here!");
poll=false;
condition1=true;
condition2=false;

}

public boolean isCondition1() {
return condition1;
}

public void setCondition1(boolean condition1) {
this.condition1 = condition1;
}

public boolean isCondition2() {
return condition2;
}
public void setCondition2(boolean condition2) {
this.condition2 = condition2;
}
public boolean isPoll() {
return poll;
}
public void setPoll(boolean poll) {
this.poll = poll;
}
}

TestBean是会话作用域的.Richfaces版本3.3.2.SR1

TestBean is session scoped.Richfaces version 3.3.2.SR1

而且在Chrome 5.0.322.2 dev中也不会出现modalPanel.在FF和IE7下都可以.

And also in Chrome 5.0.322.2 dev the modalPanel does not appear. It does under FF and IE7.

推荐答案

尝试以下任意组合:

  • <a4j:form>移动到模式面板之外
  • 将(模式面板的)domElementAttachment属性设置为formparent
  • 尝试使用<h:form>
  • move the <a4j:form> outside the modal panel
  • set the domElementAttachment (of the modal panel) attribute to either form or parent
  • try using <h:form>

请尝试以下操作,而不要使用<a4j:commandLink>:

Try the following instead of <a4j:commandLink>:

<h:graphicImage value="/images/modal/close.png" styleClass="hidelink"
            onclick="#{rich:component('examinationPanel')}.hide()" id="close" />

,并在modalPanel上使用onhide="notifyClose()",其中notifyClose()是使用<a4j:jsFunction>定义的.这是一个变通办法,但可能有效.

and use onhide="notifyClose()" on the modalPanel, where notifyClose() is defined using <a4j:jsFunction>. This is a bit of a workaround, but might work.

这篇关于a4j:commandLink在重新渲染后停止工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-20 16:33