2016-04-25 4 views
0

Мое намерение состояло в том, чтобы показать информацию о заполнении компонента текстовой области. Когда он получает фокус, я показываю информацию, когда он теряет фокус, я очищаю информацию. Я не хочу, чтобы получить какое-либо входное значение, просто поймать фокус и размытие событий, вызвать слушателя и показать/очистить сообщение.Почему PrimeFaces 5.3 не вызывает функцию моего слушателя, когда я поймаю события «размытия» и «фокуса»?

Я прочитал комментарий BalusC по условному рендерингу, поэтому я ставлю свое условное текстовое сообщение на «всегда визуализированный» компонент JSF.

Мой компонент «всегда отображается» f:outPutPanel показан в сгенерированном коде XHTML, но моя функция прослушивания никогда не вызывается. Насколько я знаю, сигнатура метода для прослушивателей-перьев является просто void somefunction() не похожей на прослушиватель jsf ajax. Я также прочитал комментарий BalusC о включении @this для атрибута proccess, но в моем случае это кажется нецелесообразным, так как я не хочу поймать какие-либо входные значения. Я новичок в JSF и перформансах, поэтому любая помощь приветствуется.

Моя отношение вид сниппет:

<h:form> 
    <h:panelGroup layout="block" id="info"> 
     <h:outputText rendered="#{ebookController.infoMessage != null}" value="#{ebookController.infoMessage}"/> 
    </h:panelGroup> 
    .... 
    <p:inputTextarea id="description" styleClass="form-control vspace" required="true" requiredMessage="Kérlek, add meg az e-könyv rövid leírását" value="#{ebookController.newEbook.description}" rows="20" cols="30" counter="display" maxlength="500" counterTemplate="{0} karakter lehet még" autoResize="false" validatorMessage="Az e-könyv leírása maximum 500 karakterből állhat"> 
     <f:validateLength maximum="500"/> 
     <p:ajax event="focus" process="@none" update="info" listener="#{ebookController.setTextAreaInfoMessage()}"/> 
     <p:ajax event="blur" process="@none" update="info" listener="#{ebookController.clearInfoMessage()}"/> 
    </p:inputTextarea> 
    <h:outputText id="display" /> 
</h:form> 

Мой соответствующий код Java:

@Named(value = "ebookController") 
@SessionScoped 
public class EbookController implements Serializable { 

private String infoMessage; 

public String getInfoMessage() { 
    return infoMessage; 
} 

public void setInfoMessage(String infoMessage) { 
    this.infoMessage = infoMessage; 
} 

public void setTextAreaInfoMessage(){ 
    setInfoMessage("Tipp: Az e-könyved bemutatása során a fontos részeket emeld ki, és tagold a szöveget bekezdésekkel. Ha egy bekezdés végére értél, csak egy ENTER-t üss!"); 
} 

public void clearInfoMessage(AjaxBehaviorEvent e){ 
     setInfoMessage(""); 
} 
.... 
} 

ответ

0

Решение 1: Пользователь F: Ajax

<f:ajax immediate="true" event="focus" process="@none" render="info" 
       listener="#{ebookController.setTextAreaInfoMessage()}" /> 
<f:ajax immediate="true" event="blur" process="@none" render="info" 
       listener="#{ebookController.clearInfoMessage()}" /> 

Managed Bean

public void setTextAreaInfoMessage() { 
     System.out.println("setTextAreaInfoMessage"); 
     setInfoMessage(
       "Tipp: Az e-könyved bemutatása során a fontos részeket emeld ki, és tagold a szöveget bekezdésekkel. Ha egy bekezdés végére értél, csak egy ENTER-t üss!"); 
    } 

    public void clearInfoMessage() { 
     System.out.println("clearInfoMessage"); 
     setInfoMessage(""); 
    } 

Ссылка Problem with h:form and p:ajax

+0

Спасибо, что ответили. К сожалению, я до сих пор получил следующий частичный ответ, взятый из инструментов Дева Google: «<частичного ответ ID = "j_id1"> <обновление ID = "j_idt16: j_idt17">

<обновление ID =" j_idt16: информация ">
<обновление ID =" j_id1: javax.faces.ViewState: 0" > 5250913947076146787: 2613487393278789583 » – Roland

+0

я был в состоянии воссоздать вам случай в моей песочнице среде. Затем нашел решение, данное BalusC. Мое испытание было выполнено с Mojarra jsf 2.2.4, pеглайфы-5.3 на Tomcat 8 – Ravi

+0

Привет, Рави. Вам не нужно было менять подпись метода «void setTextAreaInfoMessage()» на «void setTextAreaInfoMessage (AjaxBehaviorEvent e)». Я использую GlassFish 4.1.1 с Mojarra 2.2.12. На самом деле у меня кончились идеи. – Roland