我是玩框架的新手,正在使用play java 2.5.9
我正在尝试获取表单错误并使用ajax渲染它(这就是为什么我使用form.errorsAsJson()),错误应以阿拉伯语显示

我已经尝试将错误消息放在conf / messages.ar中,如下所示:

#bean validation messages
validation.required=لابد من إدخال قيمة في هذا الحقل
error.required=لابد من إدخال قيمة في هذا الحقل

我也尝试过将以下内容放入conf / ValidationMessages_ar.properties中:
error.required=\u0627\u0644\u062D\u0642\u0644 \u0645\u0637\u0644\u0648\u0628validation.required=\u0644\u0627\u0628\u062F \u0645\u0646 \u0625\u062F\u062E\u0627\u0644 \u0642\u064A\u0645\u0629 \u0641\u064A \u0647\u0630\u0627 \u0627\u0644\u062D\u0642\u0644这两个消息均未呈现,但我总是得到:
This field is required

我的动作代码如下:
@Transactional
public Result addUOMType(){
    ObjectNode result = Json.newObject();
    Form<UnitOfMeasureType> uomTypeForm = formFactory.form(UnitOfMeasureType.class);
    try{
        uomTypeForm = uomTypeForm.bindFromRequest();
        System.out.println(Http.Context.current()  != null ? Http.Context.current().lang() : "");
        if(uomTypeForm.hasErrors()){
            result.put("status", "error");
            result.put("errors", uomTypeForm.errorsAsJson());
            return ok(result);
        }
        UnitOfMeasureType uomType = uomTypeForm.get();
        uomType.save();
        result.put("status", "success");
        result.put("message", Messages.get("response.success"));
    }catch (Exception exp){
        result.put("status", "error");
        result.put("errors", Json.toJson(exp.getMessage()));
    }

    return ok(result);
}

System.out.println打印:
朗(ar)

最佳答案

Form.errorsAsJson具有overloaded version taking Lang parameter:

public com.fasterxml.jackson.databind.JsonNode errorsAsJson(Lang lang)
// Returns the form errors serialized as Json using the given Lang.

因此,您可以执行以下操作:

result.put("errors", uomTypeForm.errorsAsJson(lang()));

只要您在conf/messages.ar中定义它们,它将返回正确的本地化消息。我刚刚在我的项目中尝试过,效果很好。

方法lang()defined in play.mvc.Controller

08-04 16:49