Java不是整个对象返回?

时间:2011-12-20 10:04:28

标签: java jsf

我正在开发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。怎么会发生这种情况?如何从对象中检索某些数据? 谢谢,

1 个答案:

答案 0 :(得分:-1)

很可能您最初没有加载数据。然后JSF创建了一个空bean并从表单中设置值。现在表单中没有提到的所有内容(当然还有表单的每个空字段)都包含null。这个半生不熟的bean现在存储在DB 中,覆盖整行。如果您现在再次加载该行,您将看到所谓的“我的修改”,但是DB的完整内容是什么。您的旧数据已丢失。

关键点是:JSF和DB-Layers不处理各个字段的“修改” - 它们处理完整的实体。