Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.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 JSF对话框立即消失_Java_Jsf_Dialog_Primefaces - Fatal编程技术网

Java JSF对话框立即消失

Java JSF对话框立即消失,java,jsf,dialog,primefaces,Java,Jsf,Dialog,Primefaces,在我的JSF页面上,我在dataTable中显示了一个简单的数据库表。我希望能够编辑此表中的行。作为解决方案,当您单击第一列中的值时,我会弹出一个对话框。我使用setPropertyActionListener设置支持bean中的当前行/实体。这似乎奏效了。但是,弹出窗口在几分之一秒后消失。我不明白这是为什么。有人有什么建议吗 以下是我的dataTable的JSF代码:(如您所见,我使用的是PrimeFaces) 以及对话框的JSF代码: <p:dialog id="updateDia

在我的JSF页面上,我在
dataTable
中显示了一个简单的数据库表。我希望能够编辑此表中的行。作为解决方案,当您单击第一列中的值时,我会弹出一个对话框。我使用
setPropertyActionListener
设置支持bean中的当前行/实体。这似乎奏效了。但是,弹出窗口在几分之一秒后消失。我不明白这是为什么。有人有什么建议吗

以下是我的dataTable的JSF代码:(如您所见,我使用的是PrimeFaces)


以及对话框的JSF代码:

<p:dialog id="updateDialog" header="Update data" widgetVar="updateDlg">
    <h:form id="updateForm">
        <h:panelGrid columns="2" cellpadding="5">
            <h:outputLabel for="name" value="Name:" />
            <p:inputText id="name" value="#{misterBean.value.name}" />
            <h:outputLabel for="flag" value="Flag:" />
            <p:selectBooleanButton id="flag"
                value="#{misterBean.value.flag}"
                onLabel="On"
                offLabel="Off" />
            <f:facet name="footer">
                <p:commandButton id="submitButton"
                    value="Submit"
                    actionListener="#{misterBean.update}"
                    oncomplete="updateDlg.hide()"
                    update=":dataForm" />
            </f:facet>
        </h:panelGrid>
    </h:form>
</p:dialog>

支持bean如下所示:

@Controller
@ManagedBean( name = "misterBean" )
@ViewScoped
public final class MisterBean {

    private final MyService myService;
    private final List<Value> values;
    private Value value;

    @Autowired
    public MisterBean( final MyService myService ) {
        this.myService = myService;
        this.values = this.myService.loadValues();
        this.value = new Value();
    }

    public List<Value> getValues() {
        return this.values;
    }

    public Value getValue() {
        return this.value;
    }

    public void setValue( final Value value ) {
        this.value = value ;
    }

    public void update( final ActionEvent e ) {
        this.myService.save( this.value );
        this.value = new Value();
    }

}
@控制器
@ManagedBean(name=“misterBean”)
@视域
公共最后一节课米斯特比{
私有最终MyService MyService;
私有最终列表值;
私人价值;
@自动连线
公共MisterBean(最终MyService MyService){
this.myService=myService;
this.values=this.myService.loadValues();
this.value=新值();
}
公共列表getValues(){
返回这个值;
}
公共值getValue(){
返回此.value;
}
公共无效设置值(最终值){
这个值=值;
}
公共作废更新(最终行动事件e){
this.myService.save(this.value);
this.value=新值();
}
}

是否显示对话框后页面正在刷新?我建议尝试使用primefaces commandLink而不是本机jsf commandLink,因为我认为primefaces commandLink默认设置为
ajax=true


更改
,那么“updateDlg.show()”的javascript代码呢?如果我错了,请告诉我onClick只能调用客户端javascript方法。“updateDlg.hide()”也是这样。我在另一个页面上做了同样的操作,并且在那里也可以使用。在任何情况下:我实际上看到的对话框非常简短,因此我猜
show()
可以工作。我承认我不知道这是怎么回事。你是通过ajax同步提交表单,而不是异步提交表单。我还将用
oncomplete
替换
onclick
,这样只有在实际调用操作后才会显示对话框。我还添加了
update=“:updateDialog”
,这样对话框的内容在显示之前就用新的模型值进行了更新。
@Controller
@ManagedBean( name = "misterBean" )
@ViewScoped
public final class MisterBean {

    private final MyService myService;
    private final List<Value> values;
    private Value value;

    @Autowired
    public MisterBean( final MyService myService ) {
        this.myService = myService;
        this.values = this.myService.loadValues();
        this.value = new Value();
    }

    public List<Value> getValues() {
        return this.values;
    }

    public Value getValue() {
        return this.value;
    }

    public void setValue( final Value value ) {
        this.value = value ;
    }

    public void update( final ActionEvent e ) {
        this.myService.save( this.value );
        this.value = new Value();
    }

}