ajax - f:ajax 在我刷新之前不会呈现 outputPanel
问题描述
每次我调试应用程序并在文本框中输入内容时,控制器只会在我刷新页面时记住。没有 ajax 标签它工作正常。所以我的猜测是:outputPanel 的渲染不起作用。我设置了断点(ajax 侦听器和字段设置器都被调用)并对其进行了多次测试,结果是控制器仅在我单击按钮然后刷新页面时才起作用。参考 JSF,我使用 Eclipse for Java EE 和 Tomcat v.9.0 及更早版本。
奇怪的是,该属性在其属性中execute
仅具有输入的 id,并且仍然调用了侦听器(打印了 sysout),这在commandButton/commandLink/ajax 操作/侦听器方法中未调用#9 是不可预期的或输入值未设置/更新。但是将其更改为不会更改它name
execute
@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");
}
}
解决方案
推荐阅读
- php - Symfony4:来自两个实体的字段以一种形式
- docker - 恢复 VM 后无法连接到 docker
- java - 获取有关超级账本 Fabric 的信息
- python - 是否有任何 ORM 用于查找组件和环境的最新输出
- swift - 为库变量使用 Swift Combine 框架
- mysql - 用于选择没有相同字段的 2 个值的行的 codeigniter 查询
- python - p 值未显示
- javascript - 如何从 HTML 标签中提取 base64 文本值
- ms-word - Microsoft Word 表格列比内容控件名称窄
- node.js - 新创建项目的“npm start”错误