Имя объекта должно следовать сразу за '&' в ссылке на объект - PullRequest
2 голосов
/ 22 декабря 2011

У меня есть следующий простой код Javascript, который позволяет вводить только цифры в указанный TextField.Я использовал его ранее во многих местах, таких как сервлет, JSP, JSTL / EL и даже в PHP, и он работал нормально, как и ожидалось.Однако в JSF меня меньше беспокоит Javascript, в котором некоторые символы необходимо экранировать.Я старался изо всех сил, чтобы заставить это бежать, но я не мог.Вот код Javascript вместе с материалами 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 не компилируется.Он анализирует следующую ошибку:

An Error Occurred:

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

Я даже поместил код Javascript в отдельный файл js и включил этот файл на этой странице.Я также заменил <script></scrip> на <h:outputScript></h:outputScript>, но проблема остается прежней.


Я также попробовал следующее, чтобы увидеть, вызывается ли функция Javascript или нет, используя alert();, устраняя ошибку.парсинг кода из функции, но сама функция даже не была вызвана, и предупреждающее сообщение не отображалось.

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

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

</script>

Какие необходимые изменения необходимы в этом Javascript, чтобы запустить его должным образом?

Ответы [ 3 ]

4 голосов
/ 22 декабря 2011

Это XHTML, поэтому вам нужно либо

1 голос
/ 22 декабря 2011

Если вы используете jQuery, вам нужно сослаться на идентификатор элемента с помощью специальных символов, таких как:

<h:form id="myForm">

   <h:inputText id="myInput" />

</h:form>

<script type="text/javascript>

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

</script>

Это задокументировано здесь (в верхней части страницы).

0 голосов
/ 15 октября 2014

Я обнаружил ту же проблему и решил:

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
}

Это не круто, но работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...