最近私は私の人と一緒に問題に遭遇しました。私は条件付きでレンダリングされたアイコン/リンクを含む別々の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が含まれるすべてのページで評価されます。ページがまだ読み込まれていて、誰もまだ何かをクリックしていない場合でも!
なぜですか?そしてこれを防ぐ最善の方法は何ですか?ポップアップに必要なすべての情報を準備するために、比較的重いデータベースがいくつかあります。私はこの瞬間に誰かが実際に行うことが欲しいだけですは、ページのレンダリング段階ではなく、ポップアップのリンクをクリックします。
action
にああを変更することですが、私はどちらかそれを見つけることができませんでした。とにかく、あなたの提案は理にかなっていて、うまくいくので、私はあなたのアンカーを受け入れます! :) – Joost私は常にSO: 'site:stackoverflow.com search terms'を検索するのにGoogleを使います。 SOでの検索は色んなところです。 –
私には、しかし私はまだそれを見つけることができませんでした。そして、これだけのものよりさらに重複したものがあります。重複したQ/Aが改善されるので、見つけやすくなります。 – Kukeltje