Java JSF2命令按钮;AJAX或非AJAX,它刷新了整个页面
这是一个简单的例子,说明了这一点 您有一个带有面板和两个commandButton的表单,一个是AJAX,另一个不是。通过单击其中任何一个,将在支持bean中创建一个InputText并将其添加到面板中 我的托管bean:Java JSF2命令按钮;AJAX或非AJAX,它刷新了整个页面,java,ajax,jsf,jsf-2,Java,Ajax,Jsf,Jsf 2,这是一个简单的例子,说明了这一点 您有一个带有面板和两个commandButton的表单,一个是AJAX,另一个不是。通过单击其中任何一个,将在支持bean中创建一个InputText并将其添加到面板中 我的托管bean: @ManagedBean public class DynamicPanel { private Panel dynmaic; public Panel getDynmaic() { return dynmaic; } public void setDyn
@ManagedBean
public class DynamicPanel {
private Panel dynmaic;
public Panel getDynmaic() {
return dynmaic;
}
public void setDynmaic(Panel dynmaic) {
this.dynmaic = dynmaic;
}
public String adddynamic(){
InputText text = new InputText();
dynmaic.getChildren().add(text);
text.setValue(text.getId()+" Size= "+ dynmaic.getChildren().size());
return null;
}
public String removeall(){
this.dynmaic.getChildren().clear();
return null;
}
}
我的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:p="http://primefaces.org/ui" xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<title>Facelet Title</title>
</h:head>
<h:body>
<h:form>
<p:panel id="dynamic" binding="#{dynamicPanel.dynmaic}">
</p:panel>
<h:commandButton value="Add with AJAX" id="ajaxBtn" >
<f:ajax onevent="onClick" execute="#{dynamicPanel.adddynamic()}" render="dynamic" />
</h:commandButton>
<h:commandButton value="Add" action="#{dynamicPanel.adddynamic}" />
<h:commandButton value="remove all" action="#{dynamicPanel.removeall}" />
</h:form>
</h:body>
</html>
Facelet标题
my faces-config.xml为空
现在,我对上面的代码有三个问题。有人能给我澄清一下吗,我是JSF2新手
第一个问题是,为什么两个命令按钮的行为相同?点击以太一号会刷新整个页面
第二个问题是,为什么单击非AJAX命令按钮一次添加两个输入
第三个问题是,为什么将托管bean的作用域更改为@SessionScoped会在加载页面后出现错误?(不知何故,只要加载页面,表单就会在我不点击命令按钮的情况下发出ajax请求。这是为什么?试试下面的方法,效果会更好
<h:commandButton value="Add with AJAX" id="ajaxBtn" >
<f:ajax onevent="click" execute="ajaxBtn"
render="dynamic"
listener="#{dynamicPanel.adddynamic()}"
</h:commandButton>
请参阅下面的链接。我不明白为什么要指定execute=“#{dynamicPanel.adddynamic()}”为什么不指定“dynamic”作为值。不要复制粘贴url。单击它。对于会话范围或会话范围bean,您的支持bean应该实现可序列化接口。请查看以下帖子:我将尝试并报告back@Pr0gr4mm3r它不工作,第一次点击Ajax按钮工作正常,第二次点击yeld出现错误状态:500(我实现了serializable接口并将支持bean的作用域更改为@SessionScoped)这是因为addDynamic()函数返回null,它应该返回要重新加载的页面的视图id。顺便说一句,f:ajax上的“onevent”属性应该是“event”,我的错误。我认为返回null不是这里的问题,因为我不想离开我所在的页面。