我在JavaScript中这样做:
function doClick() {
var theValue = document.getElementById("theForm:theField").value;
var theLength = theValue.length;
if( theLength <= 3 ) --> Error
{
alert('Character length too small.');
}
}
thefield
是一个JSF组件:
<h:form id="theForm">
<h:commandButton id="theField" action="#{theBean.doFunctionA}" onclick="doClick()"/>
当我在IE中呈现此内容时,它会显示此错误:
Caused by: javax.faces.view.facelets.FaceletException: Error Parsing /viewMetadata/pages/thePage.xhtml: Error Traced[line: 66] The content of elements must consist of well-formed character data or markup.
at org.apache.myfaces.view.facelets.compiler.SAXCompiler.doCompileViewMetadata(SAXCompiler.java:716)
at org.apache.myfaces.view.facelets.compiler.Compiler.compileViewMetadata(Compiler.java:126)
at org.apache.myfaces.view.facelets.impl.DefaultFaceletFactory._createViewMetadataFacelet(DefaultFaceletFactory.java:311)
at org.apache.myfaces.view.facelets.impl.DefaultFaceletFactory.getViewMetadataFacelet(DefaultFaceletFactory.java:394)
at org.apache.myfaces.view.facelets.impl.DefaultFaceletFactory.getViewMetadataFacelet(DefaultFaceletFactory.java:376)
at org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguage._getViewMetadataFacelet(FaceletViewDeclarationLanguage.java:1940)
at org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguage.access$000(FaceletViewDeclarationLanguage.java:129)
at org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguage$FaceletViewMetadata.createMetadataView(FaceletViewDeclarationLanguage.java:2049)
at org.apache.myfaces.lifecycle.RestoreViewExecutor.execute(RestoreViewExecutor.java:161)
at org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:171)
at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:189)
... 52 more
如果我用这个替换错误行:
if( theLength == '3' || theLength == '2' || theLength == '1')
然后一切正常。我真的不明白究竟发生了什么?
答案 0 :(得分:4)
给出错误消息:
Caused by: javax.faces.view.facelets.FaceletException: Error Parsing
/viewMetadata/pages/thePage.xhtml: Error Traced[line: 66]
The content of elements must consist of well-formed character data or markup.
听起来它正试图将其解析为XML。您应该阅读JSF中通常需要的转义,但尝试的第一件事就是将其转换为XML:
if (theLength <= 3)
在诊断错误时,重要的是要意识到这实际上并没有触及浏览器的Javascript引擎 - 问题在于生成页面。