2010-02-24 18 views
6

Sorunumu izole eden bu sınama durumunu oluşturdum. A4j: commandLink eylemi, anket bir ajax güncellemesi yaptıktan sonra yürütülmez. Anketin yeniden oluşturulmasından önce modalPanel'i kapatırsak yürütülür.a4j: commandLink yeniden oluşturulduktan sonra çalışmayı durdurur

Herhangi bir öneriniz var mı? Şimdiden teşekkürler.

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> 

Bağlantı

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 oturumu kapsamlı olduğunu. Zenginleştiriciler sürüm 3.3.2.SR1

Ayrıca, Chrome 5.0.322.2 dev sürümünde modalPanel görünmez. FF ve IE7 altında.

cevap

4

Aşağıdakilerden herhangi bir kombinasyonunu deneyin: (modal panelin) domElementAttachment set

  • modal panelin dış

    • hareket <a4j:form> ya form veya parent
    • kullanmayı denemek nitelik <h:form>

    Aşağıdakileri yerine deneyin: <a4j:commandLink>:

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

    ve notifyClose()<a4j:jsFunction> kullanılarak tanımlanır modalPanel hakkında onhide="notifyClose()" kullanın. Bu biraz bir çözümdür, ancak işe yarayabilir.

  • +0

    Bu sorunu var benim uygulamasında bir bileşenden bu test vaka var. Bileşen "ana" üzerinde domElementAttachment vardır, ancak bağlantı çalışmıyor. Formu taşımaya çalışacağım ... – pakore

    +0

    ModalPanel dışındaki formun taşınması da işe yaramıyor. Yine de cevap için teşekkürler. – pakore

    +0

    @pakore - Demek istediğim - formu dışarıya taşı ve ikinci formdan kurtul. Bunu denedin mi? – Bozho

    4

    Bu çalışma çözümdür. Bozho'nun cevabını geçerli olarak kabul ettim çünkü burada uygulanan geçici çözümü önermişti, ama herkesin aynı soruna sahip olması durumunda tam çözümü burada yayınladım.

    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}" onhide="stopTimer('false')"> 
        <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> 
    </a4j:outputPanel> 
    <h:form> 
    <a4j:commandLink oncomplete="#{rich:component('examinationPanel')}.show()" reRender="testing">Link</a4j:commandLink> 
    <a4j:jsFunction name="stopTimer" actionListener="#{test.close}"> 
        <a4j:actionparam name="param1" assignTo="#{test.poll}" /> 
    </a4j:jsFunction> 
    </h:form> 
    </html> 
    

    O modalPanel etiketin a4j:jsFunction dışında tutmak önemlidir.

    TestBean.java:

    import javax.faces.event.ActionEvent; 
    import org.apache.log4j.Logger; 
    
    public class TestBean { 
        private boolean condition1 = false; 
        private boolean condition2 = true; 
        private boolean poll = true; 
    
        public void close(ActionEvent event) { 
         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; 
        } 
    } 
    
    İlgili konular