我想创建一个网络应用程序,可以将朋友添加到列表中。 出于这个原因,我使用JSF和Java Bean,但现在我遇到了一些严重的问题。
首先我创建了一个朋友类:
package at.fhjoanneum.ima11.listoffriendsjsf;
import java.io.Serializable;
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;
@Named("friend")
@RequestScoped
public class Friend implements Serializable{
private String nickname;
private String firstname;
private String lastname;
public Friend() {
}
@Override
public boolean equals(Object obj) {
if (obj != null && obj instanceof Friend) {
Friend other = (Friend) obj;
return this.getNickname().equals(other.getNickname());
}
return false;
}
// getter, setter, equals, hashcode
}
为了存储我的朋友,我创建了另一个bean:
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.enterprise.context.SessionScoped;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.inject.Named;
@Named("listOfFriendsBean") @SessionScoped
public class ListOfFriendsBean implements Serializable {
private List<Friend> listOfFriends = new ArrayList<Friend>();
public String addFriend(Friend friend) {
if(!listOfFriends.contains(friend)) {
listOfFriends.add(friend);
return "index";
} else {
FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_FATAL, "Your friend is already stored in the list!", null);
FacesContext.getCurrentInstance().addMessage(null, msg);
return "index";
}
}
public List<Friend> getListOfFriends() {
return listOfFriends;
}
最后但并非最不重要的是我创建了一个JSF文件(只是其中的一部分,这只是添加朋友的表单。上面是存储好友的表格):
<p:panel header="Add friend">
<h:panelGrid columns="2" columnClasses="column" cellpadding="5">
<p:outputLabel value="Nickname" for="nickname"/>
<p:inputText id="nickname" required="true" value="#{friend.nickname}" />
<p:outputLabel value="Firstname" for="firstname"/>
<p:inputText id="firstname" required="true" value="#{friend.firstname}" />
<p:outputLabel for="lastname" value="Lastname"/>
<p:inputText id="lastname" required="true" value="#{friend.lastname}" />
</h:panelGrid>
</p:panel>
<p:commandButton value="Add" styleClass="ui-priority-primary" ajax="false"
action="#{listOfFriendsBean.addFriend(friend)}" />
当我添加第一个朋友时,一切正常,但之后我得到一个错误,即朋友已经存储在列表中,并且旧朋友的值被更改为新值。 所以我确定我的网络应用程序正在使用相同的朋友实例,但我没有得到它,因为我使用了朋友类的请求范围。它不应该为每个请求创建一个新的朋友实例吗? 我该如何解决这个问题?
感谢您的帮助!
答案 0 :(得分:0)
我不习惯这种用法,但addFriend
似乎需要在此处制作一份Friend参数。
答案 1 :(得分:0)
我认为你应该覆盖Friend bean的equals方法:
package at.fhjoanneum.ima11.listoffriendsjsf;
import java.io.Serializable;
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;
@Named("friend")
@RequestScoped
public class Friend implements Serializable{
private String nickname;
private String firstname;
private String lastname;
public Friend() {
}
// getter, setter, equals, hashcode
@Override
public boolean equals(Object obj){
if(obj instanceof Friend && isEqual()){
return true;
}
else
return false;
}
}
答案 2 :(得分:0)
如果plz包含正确的业务模型对象覆盖(朋友)
,则检查你的equals方法