2012-12-03 35 views
0

使用PF 3.2 我面臨這個問題 如果我提交一個表單,他們是一個必填字段,驗證完成和所需的消息出現。問題是,如果我改變了組合值 - 通過ajax-改變輸入文本值dosn't改變,但是監聽器調用! XHTML提交阿賈克斯dosn't更新後的主要面孔

<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> 

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; 
} 


} 

action01

action02

+0

nice exampe。很容易理解一個再造問題。您有必要以某種方式重置表單的驗證狀態。 primefaces有一些組件重置,但我havnt玩弄他們足以回答你的問題。 –

+0

您的示例在我的環境中運行良好(複製粘貼,無編輯),但是我使用的是primefaces 3.3.1也許更新您的primefaces版本可以修復它。 – Mindwin

+0

打開控制檯或螢火蟲,查看提交後頁面是否正在進行ajax調用。 – Mindwin

回答

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