Question

J'ai obtenu ce site:

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

Et haricot soutien:

@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");
    }
}

Ce code fonctionnait sous MyFaces 2.0.0. Mais sous MyFaces 2.0.2 ou Mojarra 2.0.2 ne fonctionne pas. En disant « ne fonctionne pas » je veux dire que le texte d'entrée en cliquant (mise au point) ne déclenche actionListener (Texte « Started » ne figure pas sur la sortie standard). Quelqu'un at-il le même problème?

1 EDIT (p Après avoir changé: Ajax à 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>

Et l'erreur est:

  

javax.faces.FacesException:   contient un identifiant inconnu   « CopingFilePhase » - ne peut pas localiser   dans le cadre du composant   copingFilePhaseFocus

Était-ce utile?

La solution

Cela peut avoir deux causes:

  1. La servlet ressource Primefaces est pas correctement configuré qui provoquera que les JavaScripts nécessaires ne seront pas chargés. Vous devriez être en mesure de le voir en cochant la console d'erreur JS dans votre navigateur Web pour toute erreur JS lors de la focalisation de l'entrée. Dans Firefox, la console est disponible en appuyant sur Ctrl + Maj + J .

    Le servlet ressource sera chargée automatiquement dans Servlet 3.0 environnements (Glassfish v3, Tomcat 7, JBoss 6, etc.), mais dans des environnements anciens, vous devez configurer manuellement dans 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 signature de la méthode est erronée. Vous devriez être en mesure de le voir en lisant les journaux du serveur et de voir un javax.el.MethodNotFoundException dans les journaux. L'exemple de code dans votre question est correcte, mais il y a ambiguïté dans ActionEvent. Il y a une classe avec le même nom dans le paquet de java.awt.event. Vous pourriez avoir par mégarde (auto-) a importé. Vérifiez s'il est en effet javax.faces.event.ActionEvent et pas autre chose.

Si aucune aide, vous voudrez peut-être envisager de remplacer le PrimeFaces p:ajax par la norme JSF 2.0 f:ajax:

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

avec

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

AjaxBehaviorEvent est javax.faces.event.AjaxBehaviorEvent.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top