实体名称必须紧跟在'&'在实体引用中

The entity name must immediately follow the '&' in the entity reference

本文关键字:实体 引用      更新时间:2023-09-26

我有以下简单的Javascript代码,它只允许在指定的TextField中输入数字。我以前在Servlet、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文件中,并将该文件包含在本页中。我也用<h:outputScript></h:outputScript>代替了<script></scrip>,但同样的问题仍然存在。


我还尝试了以下操作,看看Javascript函数是否被调用或不使用alert();从函数中删除错误解析代码,但函数本身甚至没有被调用,并且没有显示警报消息。

<script type="text/javascript" language="javascript">
     $(document).ready(function()
     {
         $("#myForm:txtDemo").keypress(function(event)
         {
             alert();
         });
     });
</script>

在Javascript中需要哪些必要的更改才能使其按预期运行?

这是XHTML,所以您需要

  • 将脚本内容包裹在CDATA标签中:

    <script>
    //<![CDATA[
    $(document).ready(function()
    {
        // snip...
    }
    //]]>
    </script>
    
  • 或者,将脚本移动到外部文件,并使用<h:outputScript />包含它。

如果您正在使用jQuery,您需要使用像这样的特殊字符来引用元素的ID:

<h:form id="myForm">
   <h:inputText id="myInput" />
</h:form>
<script type="text/javascript>
   $("#myForm'':myInput").val("some value");
</script>

在这里(在页面的顶部)。

我发现了同样的问题,我用:

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
}