h:form和p:ajax(Mojarra 2.0.2和Primefaces 2.0.2)的问题

h:form和p:ajax(Mojarra 2.0.2和Primefaces 2.0.2)的问题,ajax,jsf,jsf-2,primefaces,mojarra,Ajax,Jsf,Jsf 2,Primefaces,Mojarra,我有这个网站: <!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:ui="http://java.sun.com/jsf/facelets" xmlns:h="ht

我有这个网站:

<!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:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:p="http://primefaces.prime.com.tr/ui">

<h:head></h:head>
<h:body>


    <h:form id="form-some">
        <h:inputText id="copingFilePhaseFocus">
            <p:ajax event="focus" actionListener="#{installationController.startCopyingWarFile}" />
        </h:inputText>
    </h:form>


</h:body>
</html>
此代码在MyFaces2.0.0下工作。但在MyFaces2.0.2或Mojarra 2.0.2下,情况并非如此。 通过告诉“不工作”,我的意思是单击(聚焦)输入文本不会触发actionListener(文本“已启动”不会出现在标准输出上)。 有人有类似的问题吗

编辑1(将p:ajax更改为f:ajax后):


#{msg['installPlugin.copyingwarddescription']}
(...)
错误是:

javax.faces.FacesException: 包含未知id “copingFilePhase”-找不到它 在组件的上下文中 复制文件相位焦点


这可能有两个原因:

  • Primefaces资源servlet未正确配置,这将导致无法加载必要的Java脚本。当聚焦输入时,您应该能够通过检查webbrowser中的JS错误控制台查看JS错误。在Firefox中,按Ctrl+Shift+J可以使用控制台

    资源servlet将在servlet 3.0环境(Glassfish v3、Tomcat 7、JBoss 6等)中自动加载,但是在较旧的环境中,您需要在
    web.xml
    中手动配置它:

    <servlet>
        <servlet-name>PrimeFaces Resource Servlet</servlet-name>
        <servlet-class>org.primefaces.resource.ResourceServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>PrimeFaces Resource Servlet</servlet-name>
        <url-pattern>/primefaces_resource/*</url-pattern>
    </servlet-mapping>
    


    其中
    AjaxBehaviorEvent
    javax.faces.event.AjaxBehaviorEvent
    ,这可能有两个原因:

  • Primefaces资源servlet未正确配置,这将导致无法加载必要的Java脚本。当聚焦输入时,您应该能够通过检查webbrowser中的JS错误控制台查看JS错误。在Firefox中,按Ctrl+Shift+J可以使用控制台

    资源servlet将在servlet 3.0环境(Glassfish v3、Tomcat 7、JBoss 6等)中自动加载,但是在较旧的环境中,您需要在
    web.xml
    中手动配置它:

    <servlet>
        <servlet-name>PrimeFaces Resource Servlet</servlet-name>
        <servlet-class>org.primefaces.resource.ResourceServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>PrimeFaces Resource Servlet</servlet-name>
        <url-pattern>/primefaces_resource/*</url-pattern>
    </servlet-mapping>
    


    其中
    AjaxBehaviorEvent
    javax.faces.event.AjaxBehaviorEvent

    广告1:我在web.xml文件中找到了适当的条目。广告2:这也不是问题。我正在导入javax.faces.event.ActionEvent,我的日志文件中没有关于错误的条目。f:ajax似乎工作正常。但是在f:ajax中,不是“update”属性,而是“render”。“渲染”可以渲染其h:form组件之外的组件吗?我有一个找不到组件“copingFilePhase”的错误。我将在我的原始问题中附加代码(编辑:附加代码)。你能写一个例子吗?我不太明白你的建议;)
    呈现
    相对于当前的
    UINamingContainer
    父对象(在您的情况下,它是
    ,另请参见生成的HTML输出)。如果您以
    作为前缀,它将是根的绝对值。因此,在您的特定情况下:
    render=“:copingFilePhase:actainingplugininformationphase”
    我以完全相反的方式理解您,并键入render=“copingFilePhase:actainingplugininformationphase:”。您的解决方案确实有所帮助;)再次非常感谢。但我还有一个问题。您知道当一个ajax调用返回时调用某个异步方法(通过ajax)的方法吗?我指的是一连串的祈祷。我的代码中有相当有趣的黑客行为。我调用一些方法,当它返回时,更改一些渲染标志并更新一些组件。在这种情况下,组件为一些通过ajax调用另一个方法的隐藏输入表单(style=“display:none”)设置焦点。最好的方法是指定组件parentForm:parentUI:toUpdateUIAd的路径。1:我的web.xml文件中有适当的条目。广告2:这也不是问题。我正在导入javax.faces.event.ActionEvent,我的日志文件中没有关于错误的条目。f:ajax似乎工作正常。但是在f:ajax中,不是“update”属性,而是“render”。“渲染”可以渲染其h:form组件之外的组件吗?我有一个找不到组件“copingFilePhase”的错误。我将在我的原始问题中附加代码(编辑:附加代码)。你能写一个例子吗?我不太明白你的建议;)
    呈现
    相对于当前的
    UINamingContainer
    父对象(在您的情况下,它是
    ,另请参见生成的HTML输出)。如果您以
    作为前缀,它将是根的绝对值。因此,在您的特定情况下:
    render=“:copingFilePhase:actainingplugininformationphase”
    我以完全相反的方式理解您,并键入render=“copingFilePhase:actainingplugininformationphase:”。您的解决方案确实有所帮助;)再次非常感谢。但我还有一个问题。您知道当一个ajax调用返回时调用某个异步方法(通过ajax)的方法吗?我指的是一连串的祈祷。我的代码中有相当有趣的黑客行为。我调用一些方法,当它返回时,更改一些渲染标志并更新一些组件。在这种情况下,组件为一些通过ajax调用另一个方法的隐藏输入表单(style=“display:none”)设置焦点。最好的方法是指定组件parentForm:parentUI:toUpdateUI的路径
    <servlet>
        <servlet-name>PrimeFaces Resource Servlet</servlet-name>
        <servlet-class>org.primefaces.resource.ResourceServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>PrimeFaces Resource Servlet</servlet-name>
        <url-pattern>/primefaces_resource/*</url-pattern>
    </servlet-mapping>
    
    <f:ajax event="focus" listener="#{installationController.startCopyingWarFile}" />
    
    public void startCopyingWarFile(AjaxBehaviorEvent event) {
        // ...
    }