f: ajax не отображает outputPanel, пока я не обновлю - PullRequest
1 голос
/ 19 июня 2019

Каждый раз, когда я отлаживаю приложение и что-то набираю в текстовом поле, контроллер запоминает только при обновлении страницы.Без тега ajax все работает нормально.Так что мое предположение: рендеринг outputPanel не работает.Я установил точки останова (и слушатель ajax, и метод установки полей), и несколько раз протестировал его, и в результате контроллер работал только тогда, когда я нажал кнопку, а затем обновил страницу.Ссылаясь на JSF, я работаю с Eclipse для Java EE и Tomcat v.9.0 и более ранних версий.

Странно то, что атрибут execute имеет только идентификатор для входа name в своем атрибуте execute иТем не менее, прослушиватель вызывается (sysout печатается), этого не следует ожидать согласно # 9 в commandButton / commandLink / ajax action / listener метод не вызывается или входное значение не установлено / обновлено .Но изменение его на @form не меняет его

new.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"
      xmlns:f="http://java.sun.com/jsf/core"
      >
    <h:head>
    </h:head>

    <h:body>
        <h:form id="formID">
            <h:inputText id="name" value="#{LayoutController.name}"></h:inputText>

            <h:commandButton value="Welcome Me">
                <f:ajax event="click" listener="#{LayoutController.listen}" execute=":formID:name" render=":formID:output"/>
            </h:commandButton>

            <h:panelGroup id="output">
                <h:outputText value="#{LayoutController.name}"/>
            </h:panelGroup>
        </h:form>
    </h:body>
</html>

LayoutController.java:

    package Template;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.event.AjaxBehaviorEvent;

@ManagedBean(name="LayoutController")
@SessionScoped
public class LayoutController{

    private String name;

    public LayoutController() {
        this.name="";
    }

    public String getName() {
       return name;
    }
    public void setName(String name) {
       this.name = name;
    }

    public void listen (AjaxBehaviorEvent event) {
        this.name = this.name + " ! ";
        System.out.println("Clicked");
    }


}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...