2011-12-20 3 views
-1

JSF를 개발하고 있지만 문제는 내가 믿는 자바입니다. 그 내가 다음 페이지의 요청 사항을로드하기 때문에 작업을이다 (ID를 복용하여 지금Java 전체 객체가 반환되지 않습니까?

<h:inputHidden id="id" value="#{requestClass.requestID}" /> 

: 내가 가진 reviewRequest 페이지로 전송되는 요청의 ID를 누르면 확인 그래서, 요청이있는 테이블이 데이터베이스에서 객체 검색). 이제 reviewRequest에서 객체를 수정하고 승인하면 성공적으로 저장되었다고합니다. 그런 다음 테이블에서 동일한 페이지를 다시보고 요청 ID를 클릭하면 nullpointerexception이 발생합니다. 이번에 객체를로드 할 때 메소드를 검색하는 ID를 전달하면 변경 사항 만 반환되지만 이름, 연락처 등과 같은 전체 객체 세부 정보는 반환하지 않습니다. 유형 x의 사용자가 제출 한 수정 y입니다. DB에서 메소드를 검색하는 것은 앱 전체에서 올바르게 작동하기 때문에 효과적입니다. 어떤 생각? 그림 아래의 일부 코드 :

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); 
     } 
    } 
} 

방법은 위의 첫 번째 시간을 작동하지만 수정 후. 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"); 
     ..... 

내가 넷빈즈 디버그 모드에서 rsvLocal을 검사 할 때 지금, 나는 rdhUser.response 내가 입력 한 수정을 보유하고 있지만, 모든 나머지가 null 인 것을 알 수있다. 어떻게 될 수 있습니까? 객체에서 일부 데이터를 검색하는 방법은 무엇입니까? 감사합니다.

+1

BTW : 시스템 속성 'user.name'으로 무엇을 하든지간에 JSF 컨텍스트에서 fishy가 냄새가납니다. –

+0

정말요? 그것은 항상 잘 작동하고 문자열은 정확히 일치합니다 : 로그인 페이지를 제거 할 수있는 탐지 메커니즘이기 때문에이 방법을 사용해야합니다. –

+0

그럼 코드가 인터넷에 결코 닿지 않기를 바랍니다. 즉, 서버를 시작한 OS 사용자는 John Doe와 다르게 처리됩니다. 이것은 백도어 일 수 있습니다. 이로 인해 여러 동시 사용자가 손상 될 수 있습니다. 이것은 쓰레기 테스트 ("내 컴퓨터에서 작동하는 ...") ... –

답변

-1

대개 처음에는 데이터를로드하지 않았을 가능성이 큽니다. 그런 다음 JSF는 빈 빈을 작성하고 양식에서 값을 설정합니다. 이제 양식에 언급되지 않은 모든 항목 (및 양식의 모든 빈 필드)에는 null이 포함됩니다. 이 반 볶은 콩은 DB 에 저장되어 전체 행을 덮어 씁니다. 이제 행을 다시로드하면 "내 수정 사항"이라고하는 내용이 표시되지만 DB의 전체 내용은 무엇입니까? 이전 데이터가 손실되었습니다.

요점 : JSF와 DB-Layers는 개별 필드의 "수정"을 처리하지 않습니다. 이들은 엔티티를 처리합니다.

+0

아하 어떻게 든 이것은 좋은 생각입니다 ... 당신의 추천은 무엇입니까? –

+0

완전한 엔티티 빈을 항상 처리하도록 코드를 조정해야합니다. 그것을 수행하는 방법은 코드에 완전히 달려 있습니다. –

+0

미안하지만 명확히해야합니다. 그래서 변수 rsvinstance.user.userresponse (true)를 편집 할 때 이름, dob 등과 같은 모든 데이터를 같은 장소에 다시 써야합니까? –

관련 문제