首页 > 解决方案 > f:ajax 在我刷新之前不会呈现 outputPanel

问题描述

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

奇怪的是,该属性在其属性中execute仅具有输入的 id,并且仍然调用了侦听器(打印了 sysout),这在commandButton/commandLink/ajax 操作/侦听器方法中未调用#9 是不可预期的或输入值未设置/更新。但是将其更改为不会更改它nameexecute@form

新的.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>

布局控制器.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");
    }


}

标签: ajaxjsfrefresh

解决方案


推荐阅读