Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JSF2命令按钮;AJAX或非AJAX,它刷新了整个页面_Java_Ajax_Jsf_Jsf 2 - Fatal编程技术网

Java JSF2命令按钮;AJAX或非AJAX,它刷新了整个页面

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

这是一个简单的例子,说明了这一点

您有一个带有面板和两个commandButton的表单,一个是AJAX,另一个不是。通过单击其中任何一个,将在支持bean中创建一个InputText并将其添加到面板中

我的托管bean:

@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不是这里的问题,因为我不想离开我所在的页面。