-2

h:commandLinkJSFからマネージド Bean を呼び出そうとしています。hrefしかし、レンダリングされた HTMLaタグに属性が表示されません。

何か不足していますか?

AccountSetupControllerその中のsignUpメソッドで呼び出される ManagedBean があります。

これは私が JSF で使用したタグです。

  <h:form prependId="false">
    <h:commandLink  action="#{accountSetupController.signUp()}" 
         value="#{msg['homepage.createaccount']}" styleClass="button large">
    </h:commandLink>
  </h:form>

これはレンダリングされたタグです。href 属性に何もないことを確認してください。

 <a href="#" onclick="mojarra.jsfcljs(document.getElementById('j_idt15'),
  {'j_idt33':'j_idt33'},'');return false" 
  class="button large">CREATE MY ACCOUNT</a>

生成されるフォームタグです

    <form id="j_idt15" name="j_idt15" 
    method="post" action="/myproject/faces/homepage/homepage.xhtml" 
    enctype="application/x-www-form-urlencoded">       .... </form>

ご覧のとおり、フォーム アクションは必要のない場所を指しています。

何か不足していますか?

4

1 に答える 1

3

JSF のコマンド リンクは、そのようにレンダリングされます。onclickフォームは、JSF JS ライブラリを使用して JavaScript のメソッドを介して JSF によって送信されますが、hrefは常に残り#ます。

さらに、理解できる理由により、バインドされたアクション/アクション リスナーのメソッド名がブラウザー ツールに表示されません。むしろ、JSF はクリックされたリンクの ID をサーバー上で見つけ、コンポーネントのすべてのアクション (リスナー) をトリガーします。

全体として、ドキュメントを読む<h:commandLink>ことは当然のことながら非常に役立ちます (すべての強調は私のものです):

一般的な動作: エンコード動作とデコード動作の両方で、非表示フィールドのID/名前を取得する機能が必要です。非表示フィールドは、マークアップでレンダリングされるか、クライアントの DOM 操作を介してプログラムで追加される可能性があり、その値は JavaScript フォーム送信によって設定されます(さらに hiddenFieldName と呼ばれます。

デコード動作: コンポーネントの「clientId」プロパティを取得します。ExternalContext の「requestParameterMap」プロパティから Map を取得します。上記のように hiddenFieldName を派生させます。hiddenFieldName であるキーの下のマップ内のエントリを取得します。エントリがない場合、またはエントリが空の文字列である場合、またはエントリが「clientId」プロパティの値と等しくない場合は、すぐに戻ります。エントリがあり、その値が「clientId」プロパティの値と等しい場合は、コンポーネントの周りに新しい javax.faces.event.ActionEvent インスタンスを作成し、コンポーネントで queueActionEvent() を呼び出して、イベントを渡します。

エンコード動作: 「href」属性の値として「#」をレンダリングします。指定されている場合は、コンポーネントの現在の値をリンク テキストとしてレンダリングします。「onclick」属性の値として、次と機能的に同等の JavaScript をレンダリングします。ocument.forms['CLIENT_ID']['PARAM1_NAME'].value='PARAM1_VALUE'; document.forms['CLIENT_ID']['PARAM2_NAME'].value='PARAM2_VALUE'; false を返します。document.forms['CLIENT_ID'].submit()"ここで、hiddenFieldName は上記のとおりです。CLIENT_ID は UICommand コンポーネントの clientId です。PARAM*_NAME と PARAM*_VALUE はそれぞれ名前と値です。

于 2013-07-24T07:47:59.723 に答える