我正在开发JSF,但问题出在我认为的java中。好的,所以我有一个包含请求的表,当我按下发送到reviewRequest页面的请求的id时:
<h:inputHidden id="id" value="#{requestClass.requestID}" />
现在这样做是因为我在下一页上加载了请求详细信息(通过获取ID并从数据库中检索对象)。现在,当我从reviewRequest修改对象并接受时,它表示它已成功存储。然后,我再次从表中查看同一页面,我点击了请求ID,然后它就会发出nullpointerexception。当它这次加载对象时,它将id传递给retrieve方法,然后它只返回更改,但不返回整个对象的详细信息,如名称,联系人等,只是x类型的用户提交了修改y。从数据库检索方法肯定是因为整个应用程序正常工作。任何的想法?下面的一些代码用于说明:
public void callIsValidUser(){
boolean holder = isValidUser();
if(holder == true){
rsvIns = loadDetails();
}else{
try{
FacesContext.getCurrentInstance().getExternalContext().dispatch("pending.xhtml");
}catch(IOException ioe){
System.err.print(ioe);
}
}
}
上述方法第一次工作,但修改后没有工作。 in isValid():
public boolean isValidUser(){
boolean valid = false;
try{
rsvLocal = oracleRsv.retrieveReservation(id);
String reqDivHead = rsvLocal.rdhUser.getUserID();
//rsvLocal.rdhUser.getUserResponse();
String supervisor = rsvLocal.sUser.getUserID();
String divHead = rsvLocal.dhUser.getUserID();
String currentUser = System.getProperty("user.name");
.....
现在当我在netbeans调试模式下检查rsvLocal时,我看到rdhUser.response保存我输入的修改,但所有其余的都是null。怎么会发生这种情况?如何从对象中检索某些数据? 谢谢,
答案 0 :(得分:-1)
很可能您最初没有加载数据。然后JSF创建了一个空bean并从表单中设置值。现在表单中没有提到的所有内容(当然还有表单的每个空字段)都包含null
。这个半生不熟的bean现在存储在DB 中,覆盖整行。如果您现在再次加载该行,您将看到所谓的“我的修改”,但是DB的完整内容是什么。您的旧数据已丢失。
关键点是:JSF和DB-Layers不处理各个字段的“修改” - 它们处理完整的实体。