实体名称必须紧跟'&'在实体参考中

时间:2011-12-22 04:43:15

标签: javascript jsf

我有以下简单的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文件中,并将该文件包含在此页面中。我还将<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 个答案:

答案 0 :(得分:4)

这是XHTML,所以你需要

  • Wrap the script contents in CDATA tags

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

答案 1 :(得分:1)

如果您使用的是jQuery,则需要使用如下特殊字符引用元素的ID:

<h:form id="myForm">

   <h:inputText id="myInput" />

</h:form>

<script type="text/javascript>

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

</script>

这是记录here(在页面顶部)。

答案 2 :(得分:0)

我发现了同样的问题,我解决了:

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
}

它并不酷,但它确实有效。