J'ai le code Javascript simple suivant qui permet de saisir uniquement des chiffres dans le TextField spécifié. Je l'ai utilisé plus tôt dans de nombreux endroits tels que Servlet, JSP, JSTL / EL et même en PHP et cela a bien fonctionné comme prévu. En JSF cependant, je me préoccupe moins de Javascript dans lequel certains caractères doivent être échappés. J'ai fait de mon mieux pour le faire fonctionner mais je n'ai pas pu. Voici le code Javascript avec des trucs JSF.

<?xml version='1.0' encoding='UTF-8' ?>

<html xmlns="http://www.w3.org/1999/xhtml"
     xmlns:h="http://java.sun.com/jsf/html"
     xmlns:f="http://java.sun.com/jsf/core">

<h:head>
 <title>Demo</title>

 <script type="text/javascript" language="javascript">

     $(document).ready(function()
     {
         $("#myForm:txtDemo").keypress(function(event)
         {
             if (event.keyCode==46 || event.keyCode==8|| event.keyCode==9 || event.keyCode>=35 && event.keyCode<=40)
             {
                 // let it happen, don't do anything
             }
             else
             {
                 if (event.charCode<48 || event.charCode>57 || event.charCode==16)
                 {
                            event.preventDefault();
                 }
             }                    
         });
     });

 </script>

</h:head>

<h:body>
    <h:form id="myForm">

        <br/><br/><br/>
        <h:inputText id="txtDemo" required="true" requiredMessage="Mandatory." validatorMessage="The field should contain al least 10 digits">
            <f:validateLength maximum="10" minimum="2"/>
            <f:validateRegex pattern="[0-9]*"/>
            <f:ajax event="valueChange" execute="txtDemo msg" render="txtDemo msg"/>
        </h:inputText><br/>

        <h:message id="msg" for="txtDemo" showDetail="true" style="color:red"/><br/>

        <h:commandButton id="btnSubmit" value="Submit"/>

    </h:form>
</h:body>

Javascript n'est pas en cours de compilation. Il analyse l'erreur suivante.

An Error Occurred:

Error Parsing /Restricted/TempTags.xhtml: Error Traced[line: 14] The entity name 
must immediately follow the '&' in the entity reference.

J'ai même placé le code Javascript dans un fichier js séparé et inclus ce fichier dans cette page. J'ai également remplacé <script></scrip> par <h:outputScript></h:outputScript> toujours le même problème persiste.


J'ai également essayé ce qui suit pour voir si la fonction Javascript est appelée ou non en utilisant alert(); en supprimant le code d'analyse d'erreur de la fonction, mais la fonction elle-même n'a même pas été appelée et le message d'alerte n'a pas été affiché.

<script type="text/javascript" language="javascript">

     $(document).ready(function()
     {
         $("#myForm:txtDemo").keypress(function(event)
         {
             alert();
         });
     });

</script>

Quelles modifications nécessaires sont nécessaires dans ce Javascript pour le faire fonctionner comme prévu?

2
Lion 22 déc. 2011 à 08:43

2 réponses

Si vous utilisez jQuery, vous devez vous référer à l'ID d'un élément avec des caractères spéciaux comme celui-ci:

<h:form id="myForm">

   <h:inputText id="myInput" />

</h:form>

<script type="text/javascript>

   $("#myForm\\:myInput").val("some value");

</script>

Ceci est documenté ici (en haut de la page).

1
Mr.J4mes 22 déc. 2011 à 08:00

J'ai trouvé le même problème et j'ai résolu avec:

if (event.keyCode==46 || event.keyCode==8|| event.keyCode==9 || event.keyCode>=35 &amp;&amp; event.keyCode<=40) {
    // let it happen, don't do anything
}

Ce n'est pas cool, mais ça marche.

0
skuntsel 15 oct. 2014 à 10:53
8599511