2013-02-18 2 views
0

Apache Wicket을 사용하여 양식을 작성하는 중입니다. 동일한 페이지/클래스는 새 항목을 데이터베이스에 추가하고 데이터베이스의 기존 레코드를 편집하는 데 사용됩니다. 물론 페이지 생성자는 한 번만 호출되기 때문에 모델은 페이지에 처음로드 된 레코드로 설정되거나 기존 레코드를 편집하지 않는 경우 새 레코드로 설정됩니다.Wicket 양식을 사용할 때 Wicket 모델의 로딩을 어떻게 처리해야합니까?

동적으로 데이터를로드하는 데는 여러 가지 방법이 있지만 사실은 장황하고 다소 복잡해 보입니다. 이런 시나리오를 처리하기위한 최선의 방법이 있다고 생각합니다.

참고로

는 여기에 몇 가지 편집 코드 :

public class JobManagement extends WebPage { 

private static final long serialVersionUID = 1L; 
private long jobId = 0; 

protected void setJobId(long id) { 
    this.jobId = id; 
} 

protected long getJobId() { 
    return jobId; 
} 

public JobManagement() { 
    LoadableDetachableModel<Job> jobModel = new LoadableDetachableModel<Job>() { 

     private static final long serialVersionUID = 1L; 

     @Override 
     protected Job load() { 
      Job job = (Job) EntityFactory.getInstance().getBean("job"); 

      // if we're editing an existing job, load the object 
      if (jobId >= 1) { 
       job.load(jobId); 
      } 

      return job; 
     } 

    }; 

    add(new FeedbackPanel("feedbackPanel")); 

    Form<Job> jobForm = new Form<Job>("jobForm") { 

     private static final long serialVersionUID = 1L; 

     @Override 
     public void onSubmit() { 
      // Handles the form submit... 

     } 

    }; 

    add(jobForm); 

    jobForm.setModel(new CompoundPropertyModel<Job>(jobModel)); 
    // SNIP ... All my form fields go here! 
    jobForm.add(new Button("submit")); 

} 

}

나는 LoadableDetachableModel를 사용하고 있지만, 가장 좋은 페이지가있을 때마다 동적으로로드 처리하는 방법을 나에게 완전히 분명하지 않다 렌더링. 모델의 새 인스턴스를로드하려고 시도했지만 내 LoadableDetachableModel을 반환하는 getObject() 클래스를 재정의했습니다.하지만 그에 대해 매우 잘못된 점이 있습니다. 모든 입력을 부탁드립니다. 나는 온라인 문서를 독점적으로 통해이 프레임 워크를 통해 자신의 길을 느껴 보려고 노력했기 때문에 친숙 함이 분명하지 않다는 것을 용서하십시오.

+3

에 모델에 도메인 개체를 결합하는 데 사용하는 방법이 있지만 (!) 참고로 archieve 싶은 : 그것은을 가능한 한 짧게 생성자를 유지하고 코드를'initialize()'와'onBeforeRender()'메소드로 옮기는 것이 더 좋다. 각 렌더링 전에 onBeforeRender()를 처음으로 구성하기 전에 initialize()가 호출됩니다. 아마 이것은 당신의 문제에 도움이 될 수 있습니다. – Nicktar

+0

@Nicktar 나는 네가하는 말을 분명히 보았다. 내가 찾고있는 결과를 얻을 수 있는지 확인하기 위해 이러한 방법으로 작업 해 보겠습니다. – mchandler

답변

0

내 자신의 질문에 대답하기 위해 내가 겪고있는 문제는 양식에 바인딩 된 모델이 페이지로 돌아올 때마다 지속되는 것처럼 보였습니다. 이로 인해 문제는 내가 모델을 관리하는 방법이라고 생각하게되었지만 문제는 실제로 페이지에 연결하는 방법과 관련이 있습니다.

위에서 다음과 같이 연결중인 페이지 :

Link<String> link = new BookmarkablePageLink<String>("addLink", MyAddClass.class); 

그 일부의 경우 허용 가능한 방법이지만, 그것은 특히이 경우 적절한 방법이 아니다. 의도 한대로

링크가이 방법으로 동적으로 처리됩니다
Link<String> link = new Link<String>("addLink") { 
    public void onClick() { 
     setResponsePage(new MyAddClass()); 
    } 
} 

, 내 응용 프로그램의 동작 : 무슨 일이 있어야하는 것은이 있었다. 내 링크를 통해 근본적인 문제를 해결할 수 있도록 도와 준 모든 사람들에게 감사드립니다.

0

링크 메서드 (이전 답변)는 문제를 일으킬 수 있으며 링크를 구현하는 방법에 따라 종종 발생하지만 실제 문제는 도메인의 인스턴스를로드하는 데 사용 된 "EntityFactory" 목적. 이 경우 새 인스턴스를 인스턴스화하는 대신 캐시 된 데이터를 제공합니다. - 당신이 사용중인 링크 전략

1 :

은 양식에 두 번째 시간을 탐색 할 때 다시 폼의 모델 객체가 나타나지 않는 경우 이와 같은 경우에 평가하는 일을 요약하면 페이지

2에 도착 -로드하고 폼 나는 정확히 모르겠어요