1

当我单击 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);
    }
}
}

编辑:还尝试了无条件渲染的链接,但无济于事

4

0 回答 0