0

私はJavaScriptでこれをやっています:

function doClick() {
  var theValue = document.getElementById("theForm:theField").value;
  var theLength = theValue.length;

  if( theLength <= 3 )  --> Error
  {
    alert('Character length too small.');
  }
}

そしてthefieldJSFコンポーネントです:

<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')

その後、すべてが正常に機能しています。私は本当に何が起こっているのか本当に理解していませんか?

4

1 に答える 1

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 &lt;= 3)

エラーを診断するときは、これが実際にブラウザーの Javascript エンジンに影響を与えているのではなく、ページの生成に問題があることを認識することが重要です。

于 2012-11-08T06:44:34.767 に答える