Мое намерение состояло в том, чтобы показать информацию о заполнении компонента текстовой области. Когда он получает фокус, я показываю информацию, когда он теряет фокус, я очищаю информацию. Я не хочу, чтобы получить какое-либо входное значение, просто поймать фокус и размытие событий, вызвать слушателя и показать/очистить сообщение.Почему 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("");
}
....
}
Спасибо, что ответили. К сожалению, я до сих пор получил следующий частичный ответ, взятый из инструментов Дева Google: «<частичного ответ ID = "j_id1"> <обновление ID = "j_idt16: j_idt17"> <обновление ID =" j_idt16: информация "> <обновление ID =" j_id1: javax.faces.ViewState: 0" > 5250913947076146787: 2613487393278789583 частичного ответа>» –
Roland
я был в состоянии воссоздать вам случай в моей песочнице среде. Затем нашел решение, данное BalusC. Мое испытание было выполнено с Mojarra jsf 2.2.4, pеглайфы-5.3 на Tomcat 8 – Ravi
Привет, Рави. Вам не нужно было менять подпись метода «void setTextAreaInfoMessage()» на «void setTextAreaInfoMessage (AjaxBehaviorEvent e)». Я использую GlassFish 4.1.1 с Mojarra 2.2.12. На самом деле у меня кончились идеи. – Roland