添加inputText时未调用Action和actionlistener

时间:2013-01-17 22:38:56

标签: jsf-2 primefaces action

添加action时,系统不会调用actionlistener的{​​{1}}和<p:commandButton>

以下是我的观点:

<p: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"); } ,那么&#34; uuu&#34;打印并调用<p:inputText>中的断点。但是,如果我离开clearRespuesta(),前者就不会发生。

这是如何引起的?如何解决?

1 个答案:

答案 0 :(得分:1)

我没有立即看到问题的原因,所以我将您的代码复制到我的环境中(配置了OmniFaces FullAjaxExceptionHandler),我得到了一个错误页面,其中包含以下相当自我解释的堆栈跟踪:

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)

这在服务器日志中也可见。

问题的原因是value的{​​{1}}属性中悬空的前导空格。这是setter方法调用的无效语法。

删除它:

<p:inputText>

将来需要更多关注服务器日志和ajax请求的响应主体(您可以在webbrowser的开发人员工具集的HTTP流量监视器中看到)。错误信息在那里可见。