Pregunta

he conseguido en este sitio:

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

Y respaldo de frijol:

@ManagedBean(name = "installationController")
@SessionScoped
public class InstallationController implements IPluginInstallationListener {

    // Some methods here (...)

    public void startCopyingWarFile(ActionEvent event) {
        System.out.println("\n\n\n\nStarted\n\n\n\n");
    }
}

Este código se trabaja bajo MyFaces 2.0.0. Pero bajo MyFaces 2.0.2 o 2.0.2 Mojarra no. Al decirle "no funciona" me refiero a que el texto de entrada haciendo clic (enfoque) no desencadenar actionListener (texto "Iniciado" no aparece en la salida estándar). Nadie tiene un problema similar?

EDIT 1 (Después de cambiar p: ajax a f: ajax):

    <p:outputPanel id="copingFilePhase">
        <p:accordionPanel speed="0.2"
            rendered="#{pluginInstallerWebBean.copingFilePhase}">
            <p:tab
                title="#{msg['installPlugin.copyingWar']} ... #{pluginInstallerWebBean.copingFilePhaseState}">
                <h:form prependId="false">
                    <p:focus for="copingFilePhaseFocus" />
                    <h:inputText id="copingFilePhaseFocus"
                        rendered="#{pluginInstallerWebBean.copingFilePhaseFocus}"
                        style="display:none;">
                        <f:ajax event="focus"
                            render="copingFilePhase obtainingPluginInformationPhase"
                            listener="#{installationController.startCopyingWarFile}" />
                    </h:inputText>
                </h:form>
                #{msg['installPlugin.copyingWarDescription']}
            </p:tab>
        </p:accordionPanel>
    </p:outputPanel>

    <p:outputPanel id="obtainingPluginInformationPhase">(...)</p:outputPanel>

Y el error es:

javax.faces.FacesException: contiene un ID desconocido 'CopingFilePhase' - no puede localizarlo en el contexto del componente copingFilePhaseFocus

¿Fue útil?

Solución

Esto puede tener dos causas:

  1. El servlet de recursos Primefaces no está configurado correctamente lo que provocará que no se cargarán los archivos JavaScript necesarios. Usted debe ser capaz de verlo marcando la consola de errores JS en su navegador web por cualquier error JS cuando se enfoca la entrada. En Firefox, la consola está disponible pulsando Ctrl + Shift + J .

    El servlet de recursos se cargará automáticamente en Servlet 3.0 ambientes (GlassFish v3, Tomcat 7, JBoss 6, etc), sin embargo, en ambientes de mayor edad, que tienen que configurar manualmente en 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>
    
  2. La firma del método es equivocado. Usted debe ser capaz de ver que mediante la lectura de los registros del servidor y ver un javax.el.MethodNotFoundException en los registros. El ejemplo de código en su pregunta es correcta, pero no hay ambigüedad en ActionEvent. Hay una clase con el mismo nombre en el paquete java.awt.event. Es posible que tenga accidentalmente (auto) importado. Verificar si es de hecho javax.faces.event.ActionEvent y no otra cosa.

Si ninguna ayuda, es posible que desee considerar la posibilidad de sustituir el p:ajax PrimeFaces por la norma f:ajax JSF 2.0:

<f:ajax event="focus" listener="#{installationController.startCopyingWarFile}" />

con

public void startCopyingWarFile(AjaxBehaviorEvent event) {
    // ...
}

donde AjaxBehaviorEvent es javax.faces.event.AjaxBehaviorEvent.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top