2013-07-01 4 views
0

Я пытался поставить очередь на текстовую область и не сотрудничает. Я приведу соответствующий раздел кода ниже.Richfaces 4 Ajax: queue inputTextArea not queueing

<h:form> 
    <a4j:queue requestDelay="1000" ignoreDupResponses="true"/> 
    <table> 
     <tr> 
      <td> 
       <h:outputText value="Notes:"/> 
      </td> 
     </tr> 
     <tr> 
      <td> 
       <h:inputTextarea value="#{MyActionBean.notes}"> 
        <a4j:ajax event="keyup" listener="#{MyActionBean.updateNotes}"/> 
       </h:inputTextarea> 

Примечания обновляются, как ожидается, но между запросами нет задержки. Есть ли ошибка в моем коде, не работает ли textAreas для этого? Любая помощь будет оценена по достоинству.

EDIT: Для хорошей меры, попробовал также следующий код, но он тоже не работал.

<h:panelGrid columns="1" width="100%"> 
    <h:outputText value="Notes:"/> 
    <h:inputTextarea value="#{MyActionBean.notes}"> 
     <a4j:ajax event="keyup" listener="#{MyActionBean.updateNotes}"> 
      <a4j:attachQueue id="notesQueue" requestDelay="1000"/> 
     </a4j:ajax> 
    </h:inputTextArea> 
</h:panelGrid> 

Для справки, технологические версии: JBoss AS 7, Seam 2.3.0, RichFaces 4.2.2, JSF 2.1

+0

Проверьте обновления и дайте мне знаю – Andy

ответ

0

В вашем случае вам нужно гнездо a4j:attachQueue внутри a4j. Попробуйте запустить код ниже, и вы заметите, что через 15 секунд вы получите вывод на консоль.

<h:head> 
    <title>Facelet Title</title> 
</h:head> 
<h:body> 
    <h:form> 
     <a4j:queue name='Y' requestDelay="3000" ignoreDupResponses="true"/> 
     <h:panelGrid columns="1" width="100%"> 
      <h:outputText value="Notes:"/> 
      <h:inputTextarea value="#{MyActionBean.notes}"> 
       <a4j:ajax event="keyup" listener="#{MyActionBean.updateNotes}"> 
        <a4j:attachQueue requestDelay="3000"/> 
       </a4j:ajax>    
      </h:inputTextarea> 
      <a4j:status> 
       <f:facet name="start"> 
        Please wait 
       </f:facet> 
      </a4j:status> 
     </h:panelGrid> 
    </h:form> 
</h:body> 

Вы можете использовать этот link if you need more information

UPDATE

Я урезанная код вы послали к минимуму, и я сожалею, чтобы сказать, что он по-прежнему работает на моем конце с JBoss. Ваша проблема может быть где-то в другом месте (например, ваш аякс может быть неудачным по какой-то причине, так как вы сказали мне, что «Please Wait» не появлялся). Тем не менее, я должен упомянуть, что я не знаком с областью разговора JBoss, поэтому я изменил его на javax.enterprise.context.SessionScoped (но я не думаю, что это важно, потому что оно все еще работало, когда оно было запрошено). Я включаю весь код, чтобы вы могли сами проверить его как отдельный проект. Кроме того, поскольку мы используем очередь, я изменил местоположение ведения журнала от updateNotes до setReport, чтобы я мог быть абсолютно уверен, что персонажи фактически оказались в очереди. Когда я набрал «Это тест», единственным результатом, который я видел, была вся строка, а не каждый символ.

AssessmentCheckListAction.java

import java.io.Serializable; 
import javax.faces.context.FacesContext; 
import javax.inject.Named; 
import javax.enterprise.context.SessionScoped; 

@Named(value="AssessmentChecklistAction") 
@SessionScoped 
public class AssessmentCheckListAction implements Serializable { 

    private static final long serialVersionUID = -4970638494437413924L; 
    private String report; 

    public AssessmentCheckListAction() { 
    } 

    public void updateNotes() { 
     //FacesContext.getCurrentInstance().getExternalContext().log(report); 
     //Logging the setter to make sure everything was queued 
    } 

    public String getReport() { 
     return report; 
    } 

    public void setReport(String report) { 
     FacesContext.getCurrentInstance().getExternalContext().log(report); 
     this.report = report; 
     //left blank 
    } 

index.xhtml

<?xml version='1.0' encoding='UTF-8' ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:h="http://java.sun.com/jsf/html"> 
    <h:head> 
     <title>Facelet Title</title> 
    </h:head> 
    <h:body> 
     <ui:composition xmlns="http://www.w3.org/1999/xhtml" 
         xmlns:ui="http://java.sun.com/jsf/facelets" 
         xmlns:f="http://java.sun.com/jsf/core"      
         xmlns:h="http://java.sun.com/jsf/html"     
         xmlns:a4j="http://richfaces.org/a4j" 
         template="template.xhtml"> 
      <ui:define name="content"> 
       <h:form> 
        <a4j:queue requestDelay="3000" ignoreDupResponses="true"/> 
        <h:panelGrid columns="1" width="100%"> 
         <h:outputText value="Notes:"/> 
         <h:inputTextarea value="#{AssessmentChecklistAction.report}"> 
          <a4j:ajax event="keyup" listener="#{AssessmentChecklistAction.updateNotes}"> 
           <a4j:attachQueue requestDelay="3000"/> 
          </a4j:ajax>    
         </h:inputTextarea> 
         <a4j:status> 
          <f:facet name="start"> 
           Please wait 
          </f:facet> 
         </a4j:status> 
        </h:panelGrid> 
       </h:form> 
      </ui:define> 
     </ui:composition> 
    </h:body> 
</html> 

template.xhtml

<?xml version='1.0' encoding='UTF-8' ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:h="http://java.sun.com/jsf/html" 
     xmlns:ui="http://java.sun.com/jsf/facelets"> 
    <h:head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
     <meta http-equiv="Cache-Control" content="no-store"/> 
     <meta http-equiv="Pragma" content="no-cache"/> 
     <meta http-equiv="Expires" content="0"/>    
    </h:head> 

    <h:body> 
     <ui:insert name="content"/> 
    </h:body> 
</html> 
+0

Я попытался реализовать это, но он по-прежнему отправляет каждый запрос на сервер. Различия, которые я вижу между вашим примером и моим кодом, заключаются в том, что моя оболочка заключена в , и это приложение построено на Seam, поэтому оно использует аннотацию Name, а не ManagedBean. (Так как это должно быть поведение на стороне клиента, я не думаю, что это проблема) – drandall

+0

Извините за медленный ответ. Я думаю, что мы на одной странице, добавив ajax в элемент формы, мы просим клиентскую сторону отправлять запросы в очередь, а не отправлять их немедленно. Я добавил Но когда я регистрирую метод примечаний по обновлению, он по-прежнему отправляет каждый символ.Firebug также показывает запрос для каждого символа – drandall

+0

Я попробовал запустить пример кода, который вы предоставили, но это привело к такому же поведению. Этот компонент действия использует область разговора. Состав ui: включен в макет. Базовая структура (минус все дополнительные услуги) Там нет никаких форм в макете, и она не будет представлением данных формы, как и следовало ожидать, так что никаких вложенных форм. – drandall