7

私はjsfが初めてです。コマンドボタンで簡単なJavascript機能を実行しようとしています。何度も試しましたが、警告メッセージを出すことさえできませんでした。これは私のコードの一部です。誰でも私を案内して、何が間違っているのか、それを実行するにはどうすればよいのか教えてください。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:ui="http://java.sun.com/jsf/facelets"
  xmlns:f="http://java.sun.com/jsf/core">
<h:head>
  <script type="text/javascript">
  function test(){
    alert('test');
    alert(document.getElementById('frmDashBoard:testbt').value);
  }
  </script>
</h:head>
<h:body>
  <ui:composition template="../../template/commonLayout.xhtml"> 
    <ui:define name="content">
      <div>
        <h:form id="frmdashboard">
          <div name="form_panel" style="width: 984px">
               <h:commandButton id="testbt" value="#{message.btn_dashboard_search}" action="#{searchBLAction.doAction}" onclick="test()" />
          </div>
        </h:form>
      </div>
    </ui:define>
  </ui:composition>     
</h:body> 
</html>
4

2 に答える 2

19

この小文字/大文字のタイプミス (ちなみに、関数がまったく呼び出されない原因にはなりません) とは別に、このページは を使用してテンプレート クライアントとして設計されているため、具体的な問題が発生します<ui:composition><ui:composition>タグの外側のコンテンツは、実行時に Facelets によって無視されます。このコンテンツはビジュアル Web デザイナーにのみ役立ちますが、実行時にコンパイルおよび実行されると、完全に無視されます。代わりに、コンポジションのコンテンツがマスター テンプレートに挿入さcommonLayoutれます。

<script>要素を代わりに に配置する必要があります<ui:define>。このようにして、最終的な Facelets コンポジションに取り込まれます。

<ui:define name="...">
    <script>
        ...
    </script>
    ...
</ui:define>

/resourcesまたは、フォルダー内の独自の JS ファイルに JS 関数を配置し、次のように参照することをお勧めします。

<ui:define name="...">
    <h:outputScript name="some.js" target="head" />
    ...
</ui:define>

のおかげで、ビューの構築中にtarget="head"自動的に HTML に再配置されます。<head>

以下も参照してください。

于 2012-07-01T05:24:36.997 に答える