f:ajax直到刷新后才渲染outputPanel

时间:2019-06-19 18:56:08

标签: ajax jsf refresh

每次我调试应用程序并在文本框中键入内容时,控制器仅在刷新页面时才会记住。 没有ajax标记,它可以正常工作。所以我的猜测是:outputPanel的渲染不起作用。我设置了断点(同时调用了ajax侦听器和字段设置器)并对其进行了多次测试,结果是控制器仅在单击按钮然后刷新页面后才起作用。参考JSF,我使用Eclipse for Java EE和Tomcat v.9.0及更早版本。

奇怪的是,execute属性在其name属性中仅具有execute输入的ID,并且仍然调用了侦听器(打印了sysout),但这不是为了预期符合commandButton/commandLink/ajax action/listener method not invoked or input value not set/updated中的#9。但是将其更改为@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");
    }


}

0 个答案:

没有答案