Java未返回整个对象?

Java未返回整个对象?,java,jsf,Java,Jsf,我正在开发JSF,但我相信问题出在java中。好的,当我按下发送到reviewRequest页面的请求id时,我有一个包含请求的表: <h:inputHidden id="id" value="#{requestClass.requestID}" /> 上述方法首次有效,但修改后无效。在isValid()中: 现在,当我在netbeans调试模式下检查rsvLocal时,我看到rdhUser.response保存了我输入的修改,但其余的都是null。这怎么会发生?如何从对象中检索

我正在开发JSF,但我相信问题出在java中。好的,当我按下发送到reviewRequest页面的请求id时,我有一个包含请求的表:

 <h:inputHidden id="id" value="#{requestClass.requestID}" />
上述方法首次有效,但修改后无效。在isValid()中:

现在,当我在netbeans调试模式下检查rsvLocal时,我看到rdhUser.response保存了我输入的修改,但其余的都是null。这怎么会发生?如何从对象中检索某些数据?
谢谢,

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


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

BTW:无论您如何处理系统属性
user.name
在JSF上下文中闻起来可疑。真的吗?它总是工作得很好,字符串是完全匹配的:)我必须这样做,因为这是一种检测机制,使我能够摆脱登录页面。然后让我们希望你的代码永远不会出现在互联网上。这意味着启动服务器的OS用户的处理方式与John Doe不同。这可能是个后门。这可能会粉碎多个并发用户。这可能是垃圾测试(“在我的机器上工作…”)…不,它根本不会进入互联网…只有内联网,所有用户都有唯一的id用于跟踪他们。我本来会创建一个登录页面,这是最明智的,但我的老板说,大老板不想浪费时间登录!除了遵从,我还能做什么呢:Paha不知何故,这很有意义……您的建议是什么?您必须调整代码以始终处理完整的实体bean。如何做到这一点完全取决于你的代码。对不起,但我需要澄清。所以当我编辑变量rsvinstance.user.userresponse(true)时,我应该在同一个地方再次写入所有数据,比如name、dob等?
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);
         }
     }
 }
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");  
         .....