1
<a4j:commandLink onclick="return call();" action="#{bean.deleteUser(all_user.userID)}" reRender="viewUserGrid">
<h:graphicImage style="border-style:none;" url="/images/delete.jpg"  height="10px" />
</a4j:commandLink>

問題は、deleteUserメソッドがバッキングBeanで呼び出されないことです。なぜそうなるのですか。しかし、javascript関数を呼び出しています。助けてください。

4

1 に答える 1

1

問題は、「onclick」メソッドで値を返すことです。calljs メソッドが true または false を返すと仮定すると、コードを次のように変更する必要があります。

<a4j:commandLink onclick="if (!call()) return false;"
    action="#{bean.deleteUser(all_user.userID)}"
    reRender="viewUserGrid" limitToList="true">
    <h:graphicImage style="border-style:none;" url="/images/delete.jpg"  height="10px" />
</a4j:commandLink>

さらなる説明:

実際のコードの HTML 生成コードは次のようになります (またはおなじみのもの)。

<a href="#" id="formName:j_id45351"
    name="formName:j_id22"
    onclick="return call(); A4J.AJAX.Submit('formName',event, '');">
<!-- the rest of the HTML generated code... -->

ご覧のとおり、return call();メソッドは の先頭にあるonclickため、ajax 送信は呼び出されません。私が提供する更新されたコードでは、コードは次のようになります。

<a href="#" id="formName:j_id45351"
    name="formName:j_id22"
    onclick="if (!call()) return false; A4J.AJAX.Submit('formName',event, '');">
<!-- the rest of the HTML generated code... -->

この変更により、calljs メソッドが false を返す場合、ajax 呼び出しは送信されず、true を返す場合、ajax 呼び出しが行われます。注意として、JavaScript メソッドが値を返さない場合、デフォルトで false が返されます。


更新: 提案されたコードは、RichFaces 3.x で動作します。RichFaces 4.x を使用する場合、commandLink は次のようになります。

<a4j:commandLink onclick="if (!call()) return false;"
    action="#{bean.deleteUser(all_user.userID)}"
    render="viewUserGrid">
    <h:graphicImage style="border-style:none;" url="/images/delete.jpg"
        height="10px" />
</a4j:commandLink>
于 2012-08-23T14:48:33.917 に答える