2013-01-17 59 views
0

添加<p:inputText>時,不會調用actionactionlistener<p:commandButton>添加inputText時不會調用動作和動作偵聽器

這是我的觀點:

<?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:f="http://java.sun.com/jsf/core"  
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:p="http://primefaces.org/ui" 
    xmlns:ui="http://java.sun.com/jsf/facelets"> 
    <h:body>  
     <h:form>  
      <h:outputText value="Respuesta" /> 
       <p:inputText     
        required="true" 
        value=" #{respuestaOficioBean.mrString}"/> 
       <p:commandButton   
        action="#{respuestaOficioBean.clearRespuesta}" 
        actionListener= "#{respuestaOficioBean.listener}" 
        update="growl" 
        value="s ss ssssssss ss ssszzs #{respuestaOficioBean.respuesta}"/>    
      <p:growl id="growl" showDetail="false" sticky="true" /> 
     </h:form> 
    </h:body> 
</html> 

這裏是我的豆:

private String mrString; 

public String getMrString() { 
    return mrString; 
} 

public void setMrString(String mrString) { 
    this.mrString = mrString; 
} 

public String clearRespuesta() { 
    setRespuesta(new RespuestaOficio()); 
    return null; 
} 

public void listener (ActionEvent event) { 
    System.out.println("uuu"); 
} 

如果我從視圖中刪除<p:inputText>,然後 「UUU」 打印和clearRespuesta()斷點被調用。但是,如果我離開<p:inputText>,前者不會發生。

這是如何造成的,我該如何解決?

+0

儘量不要在標題中暗示。只需以聰明的方式提出問題。 – BalusC

回答

1

我沒有立即看到你的問題的原因,所以我copypasted你的代碼到我的環境中(其中有配置FullAjaxExceptionHandler的OmniFaces)和我有以下相當自我解釋堆棧跟蹤錯誤頁面:

javax.el.PropertyNotWritableException: /index.xhtml @30,44 value=" #{respuestaOficioBean.mrString}": Illegal Syntax for Set Operation 
    at com.sun.faces.facelets.el.TagValueExpression.setValue(TagValueExpression.java:136) 
    at javax.faces.component.UIInput.updateModel(UIInput.java:818) 
    at javax.faces.component.UIInput.processUpdates(UIInput.java:735) 
    at javax.faces.component.UIForm.processUpdates(UIForm.java:281) 
    at javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1242) 
    at javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1242) 
    at javax.faces.component.UIViewRoot.processUpdates(UIViewRoot.java:1232) 
    at com.sun.faces.lifecycle.UpdateModelValuesPhase.execute(UpdateModelValuesPhase.java:78) 
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) 

這也在服務器日誌中可見。

問題的原因是<p:inputText>value屬性中的懸空前導空間。這是setter方法調用的無效語法。

刪除它:

<p:inputText     
    required="true" 
    value="#{respuestaOficioBean.mrString}"/> 

在未來付出多一點注意服務器日誌和Ajax請求(您可以在網頁瀏覽器的開發者工具集的HTTP流量監控器看到)的響應正文。錯誤信息在那裏可見。