【发布时间】:2018-05-07 12:58:46
【问题描述】:
这是一个检查用户名是否已经存在,如果不存在则添加它的函数。它在 DepartmentBean 类中。
私有列表用户;
public List<UserBean> getUsers() {
return users;
}
public int flag;
public int getFlag() {
return flag;
}
public void setFlag(int flag) {
this.flag = flag;
}
public void addIfAbsent(UserBean userBean) {
if (users.stream().anyMatch(x -> x.getUsername().equals(userBean.getUsername()))) {
setFlag(1);// flag to indicate that there is user with the same name
} else {
setFlag(2);
users.add(userBean);// add the user
}
}
在 Servlet 中,我像这样检查标志:
DepartmentBean dp = new DepartmentBean();
UserBean user = new UserBean();//UserBean is class which store name and password
DepartmentBean departmentBean = read();
String userName = request.getParameter("username");
String password = request.getParameter("password");
user.setPassowrd(password);
user.setUsername(userName);
departmentBean.addIfAbsent(user);
if(dp.flag == 2)//if flag is 2, their's no user with the same name, so write it
{
RequestDispatcher rd=request.getRequestDispatcher("index.jsp");
rd.forward(request, response);
write(departmentBean);//write to xml
}
如果这超出了 if 大括号正在工作并制作记录。但是,如果我使用它,它不会将我带到白页而不是 index.jsp。
这是 Servlet 中的写入和读取函数:
public static DepartmentBean read() throws JAXBException {
JAXBContext context = JAXBContext.newInstance(DepartmentBean.class, UserBean.class);
Unmarshaller unmarshaller = context.createUnmarshaller();
return (DepartmentBean) unmarshaller.unmarshal(new StreamSource(new File("1.xml")));
}
public static void write(DepartmentBean department) throws JAXBException {
JAXBContext context = JAXBContext.newInstance(DepartmentBean.class, UserBean.class);
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
marshaller.marshal(department, new File("1.xml"));
}
【问题讨论】:
-
为什么不让
addIfAbsent(...)返回一个布尔值并摆脱flag的魔力?但是如果 add...if...absent 应该已经处理过了,servlet 为什么还要写呢?