commandLink をクリックすると、リスナーが機能し、フォームが再レンダリングされて別の commandLink が表示されます。次に、そのコマンド リンクをクリックすると、フォームのみが再レンダリングされ、リスナーは呼び出されません。リフレッシュしたら、すべて問題ありません。
私のJSFページ:
<h:form>
<h:panelGroup layout="block" styleClass="navLink"
rendered="#{userBean.loggedUser ne null and not userBean.userLogged and not userBean.loggedUserFriend}">
<h:commandLink value="Add to friends">
<f:ajax render="@form" listener="#{userBean.addToFriends}"/>
</h:commandLink>
</h:panelGroup>
<h:panelGroup layout="block" styleClass="navLink" rendered="#{userBean.loggedUser ne null and userBean.loggedUserFriend}">
<h:commandLink value="Remove from friends">
<f:ajax render="@form" listener="#{userBean.removeFromFriends}"/>
</h:commandLink>
</h:panelGroup>
</h:form>
ユーザービーン:
@Named
@SessionScoped
public class UserBean implements Serializable {
private User loggedUser;
private User user;
@EJB
private UserDAO dao;
public boolean isUserLogged() {
return loggedUser != null && user.equals(loggedUser);
}
public boolean isLoggedUserFriend() {
return loggedUser != null && loggedUser.getFriends().contains(user);
}
public void addToFriends() {
if (loggedUser != null && user != null) {
loggedUser.addFriend(user);
dao.update(loggedUser);
}
}
public void removeFromFriends() {
if (loggedUser != null && user != null) {
loggedUser.getFriends().remove(user);
dao.update(loggedUser);
}
}
}
編集:無条件にレンダリングされたリンクでも試してみましたが、役に立ちませんでした