提交ajax后的基本面孔没有更新

问题描述 投票:0回答:1

使用PF 3.2我遇到了这个问题如果我提交表单并且其为必填字段,则会完成验证并显示必填消息。问题是之后,如果我更改了通过ajax-更改inputtext的组合值,则该值不会更改,但是侦听器会调用它!xhtml

<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:p="http://primefaces.org/ui"
  xmlns:f="http://java.sun.com/jsf/core">
<h:head>
    <title>Prime Test</title>
</h:head>


<h:body style="background: #F6F6F6;">
    <h:form id="idAjaxFormTest">
        <f:view>
           <h1> <h:outputText value="after submit ajax problem" /></h1>
            <p:messages showSummary="true" autoUpdate="true" />
            <p:panelGrid columns="2">
                <h:outputText value="Names" />
                <p:selectOneMenu value="#{ajaxTest.name}">
                    <f:selectItems value="#{ajaxTest.names}" var="varName"
                                   itemLabel="#{varName}" itemValue="#{varName}">
                    </f:selectItems>
                    <p:ajax listener="#{ajaxTest.listen}" update="idXname" />
                </p:selectOneMenu>

                <h:outputText value="Xname" />
                <p:inputText value="#{ajaxTest.xname}" id="idXname"/>

                <h:outputText value="Xuser" />
                <p:inputText required="true" transient="true" value="#{ajaxTest.xuser}" label="xUser" />
            </p:panelGrid>
            <p:commandButton value="Submit" action="#{ajaxTest.doAction}" />
        </f:view>
    </h:form>
</h:body>

Bean

package com.actions;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;


@ManagedBean(name = "ajaxTest")
@ViewScoped

public class AjaxTestBean implements Serializable{
    private List<String> names;
    private String name;
    private String xname;
    private String xuser;

public AjaxTestBean() {
    names = new ArrayList<String>();
    names.add("ahmed");
    names.add("mohamed");
    names.add("mahmoud");
    names.add("ayman");
    names.add("walid");
    names.add("khalid");
}

public void listen(){
    xname = "QQ "+ name;
    System.out.println("Listener "+ xname);
}
public void doAction(){
    System.out.println("Action Done: "+ name);
}

public List<String> getNames() {
    return names;
}

public void setNames(List<String> names) {
    this.names = names;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getXname() {
    return xname;
}

public void setXname(String xname) {
    this.xname = xname;
}

public String getXuser() {
    return xuser;
}

public void setXuser(String xuser) {
    this.xuser = xuser;
}


}

“

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS96NDBOVi5wbmcifQ==” alt =“ action02”>

java ajax jsf-2 primefaces
1个回答
3
投票

好像您遇到了这个问题:

How can I populate a text field using PrimeFaces AJAX after validation errors occur?

将以下内容与OmniFaces库一起添加到faces-config.xml中,使您的单选菜单正确更新了inputField

<lifecycle>
    <phase-listener>org.omnifaces.eventlistener.ResetInputAjaxActionListener</phase-listener>
</lifecycle>

如果您不想对所有组件执行此操作,OmniFaces将展示如何针对每个组件执行此操作:http://showcase.omnifaces.org/eventlisteners/ResetInputAjaxActionListener

© www.soinside.com 2019 - 2024. All rights reserved.