2012-01-27 4 views
0

私はこれとは別の方法でオープンしていますが、RichFaces4とJSF2のドキュメントからはうまくいくはずです。a4j:paramが値の属性で指し示されたjavascriptを呼び出さない

ユーザーの流れはこのようなものです:ユーザーがクリックして入力するためのダイアログが表示されます)

  • 2 outputLink:時間で実装している「チェックアウト」の文書リンクがあり

    • 1)時間で実装popupPanel:
    • 3 popupPanel
    • )ユーザーがコメントを入力し、豊かな上のボタンを、[続行]をクリック:豊かで実装されたコメントをチェックアウトリンク(しようとしたH:のcommandLinkとa4jを:ものcommandLink)
    • 4)A新しいウィンドウが表示され、内容がh:link outcome attribuに設定されます私の壊れた場合のTE

    私はhからパラメータを渡すとき、すべては除いて動作します:a4jとのリンク :PARAM、その値属性、それはに正しく指しJavaScriptを解決しません。私は、テキストエリアに入力した内容ではなくDLG上の別のボタンを置くと、それは同じ要素のidにonclickのだ指し示すことによって指し示していなかった、それがなかった

    document.getElementById('myForm:dataTable:0:commentsId').value 
    

    <h:outputLink id="promptForCommentsLink" 
           onclick="#{rich:component('commentsDlg')}.show();return false;" 
           value="#"> Check Out </h:outputLink> 
    
    <rich:popupPanel id="commentsDlg" modal="true"> 
        <h:inputTextarea id="commentsId"/> 
        <h:link id="continueLink" 
           outcome="editorPage" <!-- editor for making changes to document --> 
           target="_blank" <!-- open in it;s own indow --> 
           value="Continue Check Out" 
           onclick="#{rich:component('commentsDlg')}.hide();"> 
    
         <!-- these params get assignd to backing bean properties --> 
         <a4j:param name="dataId" 
            value="#{ithRow.id}" assignTo="#{myController.dataId}"/> 
         <a4j:param name="checkedOut" 
            value="true" assignTo="#{myController.checkedOut}"/> 
    
         <!-- this one is broken. assigns chars 'document.getElementById('.. 
          to #{myController.checkOutComment} --> 
         <a4j:param name="checkOutComment" 
            assignTo="#{myController.checkOutComment}" 
            noEscape="true" 
    value="document.getElementById('myForm:dataTable:0:commentsId').value" 
            /> 
        </h:link> 
    </rich:popupPanel> 
    

    私は多分考えていました実際にそれがタイプしたものを私に警告する。

    私は、サーバー側のビューに停止myController.setCheckOutComment(のString)メソッドをスコープ、それは文字列渡さ "のdocument.getElementById( 'あるmyForm:dataTableの:0:commentsIdを')。値"

    よりますto RF4 documentation:

    a4j:paramタグは、Ajaxコンポーネントに加えて非Ajaxコンポーネントとともに使用できます。リンク

    とJavaScript関数から

    変数値属性のために使用することができる。これは、hと、GET要求を通じて作業している構成要素を含みます。このような実装では、noEscape属性をtrueに設定する必要があります。 noEscape = "true"を使用すると、value属性に任意のJavaScript式またはJavaScript関数呼び出しを含めることができ、結果はvalue属性としてサーバーに送信されます。

    私はjsf/rf4のルールで演奏しているようだから、これは大丈夫だと思いました。代わりに、時間ののcommandLink:私はa4j使用する場合、注意すべき

    一つのリンクを、それが実際に 評価されたJavaScriptの結果を送信んが、しかし、それは独自のウィンドウ およびその他のいくつかの問題に開口部を壊します。

    何が起こっているのか、これを行うにはさらに良い方法がありますか?

  • 答えて

    0

    必要なパラメータを指定してa4j:jsFunctionを使用できます。次に、その関数をsetParams(#{ithRow.id}、true)のようなh:linkタグのonclickから呼び出します。問題は、あなたがパラメータとしてjavascript関数に値を渡すことができないことに残っています。 inputAreaの値をバッキングBeanに保存し、バックエンドでその値を処理させるには 'execute'を使用します。

    そうですね、私は違ったやり方をします。私はあなたがバックエンドで2つの他のパラメータを扱うことができると思うし、私は '実行'を使用してinputAreaの値を格納します。

    MAG、 ミロファンデジー

    +0

    RichFacesの4のa4jはので、私は、問題が説明する解決へのDIF appoachに行かなければならなかった:paramは時間で動作していないようです:リンク文書で説明するよう。 a4j:paramのvalue属性は、noEscape = true属性が指定されている場合、javascriptと同じように評価されます。私はそれを他の誰かが答えるために開いたままにしますが、RFコミュニティの人々は決して反応しませんでした。私がしたことは、チェックアウトプロセスを中断し、2回のマウスクリック/ステップに編集することでした。ワンクリックでチェックアウトを示すDBが更新され、h:リンクを再度クリックして新しいウィンドウでターゲットコンテンツを開く必要があります。 – user825402

    関連する問題