2016-09-01 4 views
0

最近私は私の人と一緒に問題に遭遇しました。私は条件付きでレンダリングされたアイコン/リンクを含む別々のxhtmlを持っていて、異なる種類のポップアップを表示しています。このxhtmlは基本的に、私が別のページに含めることができる特定の種類のポップアップのコンテナです。レンダリングされた条件(および渡されたui:パラメータ)は、このxhtmlがどこに含まれているかによって、関連するアイコン/リンクのみが表示されるようにします。これにより、各ページにたくさんの異なるui:includesを書く必要がなくなります。JSF/ELは、ページのレンダリング中にonClickを評価します。どうして?

一部のポップアップでは、a4j:commandLinkのonclick属性を使用してデータを準備する必要があります。次いで、onCompleteのはそうのような実際のポップアップを表示します:

<a4j:commandLink render="clientGroupMemberInfoPopup" rendered="#{assignmentDO.clientGroupMember}" 
       onclick="#{clientInfoBean.registerGmClientGroupMember(assignmentDO.gmClientGroupMemberDO)}" 
       oncomplete="RichFaces.ui.PopupPanel.showPopupPanel('ClientInfo')"> 
    <h:graphicImage value="/img/icons/icon_info_sm.png" rendered="#{!printFriendly}"/> 
</a4j:commandLink> 

対応するBean:

@ManagedBean 
@ViewScoped 
public class ClientInfoBean { 

    @EJB 
    private ClientService clientService; 

    @Getter 
    @Setter 
    private ClientContextDO clientContextDO; 

    @Getter 
    @Setter 
    private GmClientGroupMemberDO gmClientGroupMemberDO; 

    @Getter 
    @Setter 
    private Long clientId; 

    public void registerGmClientGroupMember(final GmClientGroupMemberDO aGroupMember) { 
     gmClientGroupMemberDO = aGroupMember; 
     clientContextDO = clientService.findByClientId(gmClientGroupMemberDO.getClientId()); 
    } 

} 

をa4jのレンダリング条件上記ここで:のcommandLinkが真と評価します。しかし... onclickは、レンダリングされた条件が真と評価されると、毎回このxhtmlが含まれるすべてのページで評価されます。ページがまだ読み込まれていて、誰もまだ何かをクリックしていない場合でも!

なぜですか?そしてこれを防ぐ最善の方法は何ですか?ポップアップに必要なすべての情報を準備するために、比較的重いデータベースがいくつかあります。私はこの瞬間に誰かが実際に行うことが欲しいだけですは、ページのレンダリング段階ではなく、ポップアップのリンクをクリックします。

答えて

1

この質問は重複していますが、わかりませんが見つかりません。 BalusCがそのようにフラグを立てると、この回答は削除されます。

onclickは、JavaScriptを実行するためのもので、サーバー側のメソッドにはアクセスしません。その中のELは、メソッド式ではなく値式として評価されます。したがって、出力はjavascriptとみなされます。その結果、レンダリング時に評価され、クリックされると再評価されます。

ソリューションは、私も同様の質問を探してみました、onclick

<a4j:commandLink render="clientGroupMemberInfoPopup" rendered="#{assignmentDO.clientGroupMember}" 
       action="#{clientInfoBean.registerGmClientGroupMember(assignmentDO.gmClientGroupMemberDO)}" 
       oncomplete="RichFaces.ui.PopupPanel.showPopupPanel('ClientInfo')"> 
    <h:graphicImage value="/img/icons/icon_info_sm.png" rendered="#{!printFriendly}"/> 
</a4j:commandLink> 
+0

actionにああを変更することですが、私はどちらかそれを見つけることができませんでした。とにかく、あなたの提案は理にかなっていて、うまくいくので、私はあなたのアンカーを受け入れます! :) – Joost

+0

私は常にSO: 'site:stackoverflow.com search terms'を検索するのにGoogleを使います。 SOでの検索は色んなところです。 –

+0

私には、しかし私はまだそれを見つけることができませんでした。そして、これだけのものよりさらに重複したものがあります。重複したQ/Aが改善されるので、見つけやすくなります。 – Kukeltje

関連する問題