1

これが私の検証方法です-

@Override
  public void validate() {
    errors = new HashMap<String, String>();
    if(StringUtil.isBlank(examCode)){
      errors.put("examCode", "Exam code is required");
    }
    if(StringUtil.isBlank(strPaperType)){
      errors.put("paperType", "Paper Type is required");
    }else{
      paperType = PaperType.getPaperTypeByValue(strPaperType);
      if(paperType == null){
        errors.put("paperType", "A valid Paper Type is required");
      }
      if(paperType.equals(PaperType.PRACTICE)){
        if(topicId ==null){
          errors.put("topicId", "Topic Id is required");
        }
      }
    }
    if(StringUtil.isBlank(instructions)){
      errors.put("instructions", "Paper Instructions are required");
    }
  }

「エラー」は、アクションで定義された私自身のマップです。'fieldErrors'にエラーを追加していません。'fieldErrors'をデバッグすると、'validate'メソッドに入る前でも何が起こっているのでしょうか。次の2つのエントリが表示されます-

{"id":["Invalid field value for field \"id\"."],"topicId":["Invalid field value for field \"topicId\"."]}

どこから追加されているのかわかりません。これが私のストラットのconfです。

<package name="api" extends="json-default" namespace="/api">
    <action name="paper" class="paperApiAction">
      <result name="json" type="json">
        <param name="root">responseDto</param>
      </result>
      <result name="input" type="json">
        <param name="root">fieldErrors</param>
      </result>
    </action>
  </package>

これについて助けが必要です。ありがとう

4

2 に答える 2

2

conversionError」インターセプターは型変換エラーを受け取り、それらをに入れますfieldErrors。スタックから取り出す方が簡単なユースケースがあります。これがその1つかどうかはわかりません。

なぜわざわざfieldErrors地図を複製するのですか?独自のDTOで使用するためのマップが必要な場合でも、既存の検証メカニズムを使用してみませんか?違いはごくわずかで、もう少し柔軟性があります。次に、紙の種類の検証を外部化されたビジネスロジックに組み込み、それとアクションの両方のテストを簡素化できます。


無関係ですが、空白がないため、コードが読みにくいと思います。素朴なリファクタリング:

@Override
public void validate() {
    errors = new HashMap<String, String>();

    if (StringUtil.isBlank(examCode)) {
        errors.put("examCode", "Exam code is required");
    }

    if (StringUtil.isBlank(instructions)) {
      errors.put("instructions", "Paper Instructions are required");
    }

    if (StringUtil.isBlank(strPaperType)) {
        errors.put("paperType", "Paper Type is required");
    } else {
        validatePaperType();
    }
}

public void validatePaperType() {
    paperType = PaperType.getPaperTypeByValue(strPaperType);
    if (paperType == null) {
        errors.put("paperType", "A valid Paper Type is required");
        return;
    }

    if (paperType.equals(PaperType.PRACTICE) && (topicId == null)) {
        errors.put("topicId", "Topic Id is required");
    }
}
于 2012-09-04T23:53:21.800 に答える
0

idおよびtopicIdクラス変数は整数のようですが、それらを文字列として設定しようとしています。

于 2012-09-04T21:31:39.500 に答える