0

検証メッセージを設定する BalusC の好意によるこの抽象フォーム クラスがあります。

 public abstract class Form {

// Properties 
private Map messages = new LinkedHashMap();
private List formFeedback = new ArrayList();
private List errorMessages = new ArrayList();
private boolean hasError;

次に、フォームを拡張するクラスがたくさんあります

public class ParentForm extends Form { 
public class SubForm1 extends Form {
public class SubForm2 extends Form {
public class SubForm3 extends Form {

parentForm で各サブフォームを呼び出しますが、検証メッセージをサブフォームから親に渡す方法がわかりません。

public class ParentForm extends Form { 

  public Object update(HttpServletRequest request) {

    pseudo code
     //if subform1 is being edited
     SubForm1 subForm1 = new SubForm1 (authenticatedUser);
     subFormBean1 sfb1 = new subFormBean1 ();
     sfb1 = subForm1.update(request);

     //if subform2 is being edited
     SubForm2 subForm2 = new SubForm2 (authenticatedUser);
     subFormBean2 sfb2 = new subFormBean2 ();
     sfb2 = subForm2.update(request);

Formサービスは、Struts スタイルのアクションを使用してサーブレットで実行されます

クラス UpdateAction

public class UpdateAction implements ControllerAction {

private Form form;
private Object obj;
private HashMap modelMap;

    public UpdateAction(HashMap modelMap, Form form, Object obj) {
    this.form = form;
    this.obj = obj;
    this.modelMap = modelMap;
}

public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    obj = form.update(request);
            request.setAttribute("obj", obj);
            request.setAttribute("form", form);

私のjspsに入れます

<span class="formError"><c:out value="${form.messages.whatever}" />ただし、これはサブフォームからではなく、親フォームからのみメッセージを取得しています

`form[subForm].messages.whatever のようなものがうまくいくのだろうか? 何かのようなもの

 if (!sfb1.notSuccess) {
 parentForm.setSubFormMessages(sfb1.getMessages());
 }

私のプロジェクトはかなり長いですが、基本的には、HTML ページのセクション (コンポーネント??) を、特定の条件下でのみアクティブになる HTML フォームにしたいと考えています (これは、オフィス内を手作業でルーティングしていたチェックリストのワークフロー アプリケーションです)。 ) 吸い上げてJSFに移植するか、Formクラスを変更した方が良いのだろうか。

編集 私は抽象的なサブフォームを実装しようとしていますが、サブフォームのこのようなものは、エントリの検証(processEntry)が失敗したと言っても、Daoを更新します

  processEntry(request, ad);
  processEdit_date(request, ad);
  if (isSucces()) {
    dao.update(ad, authenticatedUser);
  }
4

1 に答える 1

1

基本的ParentFormに、サブフォームの作成中に合格する必要があります。

SubForm1 subForm1 = new SubForm1(this, authenticatedUser);

public SubForm1(Form parent, User authenticatedUser) {
    this.parent = parent;
    this.authenticatedUser = authenticatedUser;
}

次に、SubForm1デリゲートでメッセージを送信します

public addMessage(field, message) {
    parent.addMessage(field, message);
}

SubForm1、などをDRYに保つためにSubForm2、ラッパーパターンに従って別の抽象クラスを作成できます。

public abstract class SubForm extends Form {

    private Form parent;

    public SubForm(Form parent) {
        this.parent = parent;
    }

    public addMessage(field, message) {
        parent.addMessage(field, message);
    }

    // ...
}

SubForm1次に、、SubForm2などを次のように設計します。

public class SubForm1 extends SubForm {

    public SubForm1(Form parent, User authenticatedUser) {
        super(parent);
        this.authenticatedUser = authenticatedUser;
    }

    // ...
}
于 2012-10-05T11:08:41.220 に答える