#592 show invalid field
This commit is contained in:
parent
046b638600
commit
8eb24c2ea9
3 changed files with 170 additions and 65 deletions
|
@ -245,27 +245,7 @@ public class AdminSearchlistAction extends FessAdminAction {
|
|||
public HtmlResponse create(final CreateForm form) {
|
||||
verifyCrudMode(form.crudMode, CrudMode.CREATE);
|
||||
validate(form, messages -> {}, () -> asEditHtml());
|
||||
if (!fessConfig.validateIndexRequiredFields(form.doc)) {
|
||||
throwValidationError(messages -> messages.addErrorsCrudFailedToCreateInstance(GLOBAL), () -> asEditHtml());
|
||||
}
|
||||
if (!fessConfig.validateIndexArrayFields(form.doc)) {
|
||||
throwValidationError(messages -> messages.addErrorsCrudFailedToCreateInstance(GLOBAL), () -> asEditHtml());
|
||||
}
|
||||
if (!fessConfig.validateIndexDateFields(form.doc)) {
|
||||
throwValidationError(messages -> messages.addErrorsCrudFailedToCreateInstance(GLOBAL), () -> asEditHtml());
|
||||
}
|
||||
if (!fessConfig.validateIndexIntegerFields(form.doc)) {
|
||||
throwValidationError(messages -> messages.addErrorsCrudFailedToCreateInstance(GLOBAL), () -> asEditHtml());
|
||||
}
|
||||
if (!fessConfig.validateIndexLongFields(form.doc)) {
|
||||
throwValidationError(messages -> messages.addErrorsCrudFailedToCreateInstance(GLOBAL), () -> asEditHtml());
|
||||
}
|
||||
if (!fessConfig.validateIndexFloatFields(form.doc)) {
|
||||
throwValidationError(messages -> messages.addErrorsCrudFailedToCreateInstance(GLOBAL), () -> asEditHtml());
|
||||
}
|
||||
if (!fessConfig.validateIndexDoubleFields(form.doc)) {
|
||||
throwValidationError(messages -> messages.addErrorsCrudFailedToCreateInstance(GLOBAL), () -> asEditHtml());
|
||||
}
|
||||
validateCreateFields(form);
|
||||
verifyToken(() -> asEditHtml());
|
||||
getDoc(form).ifPresent(
|
||||
entity -> {
|
||||
|
@ -294,27 +274,8 @@ public class AdminSearchlistAction extends FessAdminAction {
|
|||
public HtmlResponse update(final EditForm form) {
|
||||
verifyCrudMode(form.crudMode, CrudMode.EDIT);
|
||||
validate(form, messages -> {}, () -> asEditHtml());
|
||||
if (!fessConfig.validateIndexRequiredFields(form.doc)) {
|
||||
throwValidationError(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, form.docId), () -> asEditHtml());
|
||||
}
|
||||
if (!fessConfig.validateIndexArrayFields(form.doc)) {
|
||||
throwValidationError(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, form.docId), () -> asEditHtml());
|
||||
}
|
||||
if (!fessConfig.validateIndexDateFields(form.doc)) {
|
||||
throwValidationError(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, form.docId), () -> asEditHtml());
|
||||
}
|
||||
if (!fessConfig.validateIndexIntegerFields(form.doc)) {
|
||||
throwValidationError(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, form.docId), () -> asEditHtml());
|
||||
}
|
||||
if (!fessConfig.validateIndexLongFields(form.doc)) {
|
||||
throwValidationError(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, form.docId), () -> asEditHtml());
|
||||
}
|
||||
if (!fessConfig.validateIndexFloatFields(form.doc)) {
|
||||
throwValidationError(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, form.docId), () -> asEditHtml());
|
||||
}
|
||||
if (!fessConfig.validateIndexDoubleFields(form.doc)) {
|
||||
throwValidationError(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, form.docId), () -> asEditHtml());
|
||||
}
|
||||
validateUpdateFields(form);
|
||||
logger.debug("DEBUUG:::role" + form.doc.get("role"));
|
||||
verifyToken(() -> asEditHtml());
|
||||
getDoc(form).ifPresent(
|
||||
entity -> {
|
||||
|
@ -350,6 +311,104 @@ public class AdminSearchlistAction extends FessAdminAction {
|
|||
return redirectWith(getClass(), moreUrl("search").params("q", form.q));
|
||||
}
|
||||
|
||||
// ===================================================================================
|
||||
// Validation
|
||||
// =========
|
||||
protected void validateCreateFields(final CreateForm form) {
|
||||
|
||||
if (!fessConfig.validateIndexRequiredFields(form.doc)) {
|
||||
List<String> invalidRequiredFields = fessConfig.invalidIndexRequiredFields(form.doc);
|
||||
throwValidationError(messages -> {
|
||||
messages.addErrorsCrudFailedToCreateInstance("doc." + invalidRequiredFields.get(0));
|
||||
// TODO messages.addConstraintsRequiredMessage("doc." + invalidRequiredFields.get(0), invalidRequiredFields.get(0));
|
||||
}, () -> asEditHtml());
|
||||
}
|
||||
|
||||
if (!fessConfig.validateIndexArrayFields(form.doc)) {
|
||||
List<String> invalidArrayFields = fessConfig.invalidIndexArrayFields(form.doc);
|
||||
throwValidationError(messages -> {
|
||||
messages.addErrorsCrudFailedToCreateInstance("doc." + invalidArrayFields.get(0));
|
||||
}, () -> asEditHtml());
|
||||
}
|
||||
if (!fessConfig.validateIndexDateFields(form.doc)) {
|
||||
List<String> invalidDateFields = fessConfig.invalidIndexDateFields(form.doc);
|
||||
throwValidationError(messages -> {
|
||||
messages.addErrorsCrudFailedToCreateInstance("doc." + invalidDateFields.get(0));
|
||||
}, () -> asEditHtml());
|
||||
}
|
||||
if (!fessConfig.validateIndexIntegerFields(form.doc)) {
|
||||
List<String> invalidIntegerFields = fessConfig.invalidIndexIntegerFields(form.doc);
|
||||
throwValidationError(messages -> {
|
||||
messages.addErrorsCrudFailedToCreateInstance("doc." + invalidIntegerFields.get(0));
|
||||
}, () -> asEditHtml());
|
||||
}
|
||||
if (!fessConfig.validateIndexLongFields(form.doc)) {
|
||||
List<String> invalidLongFields = fessConfig.invalidIndexLongFields(form.doc);
|
||||
throwValidationError(messages -> {
|
||||
messages.addErrorsCrudFailedToCreateInstance("doc." + invalidLongFields.get(0));
|
||||
}, () -> asEditHtml());
|
||||
}
|
||||
if (!fessConfig.validateIndexFloatFields(form.doc)) {
|
||||
List<String> invalidFloatFields = fessConfig.invalidIndexFloatFields(form.doc);
|
||||
throwValidationError(messages -> {
|
||||
messages.addErrorsCrudFailedToCreateInstance("doc." + invalidFloatFields.get(0));
|
||||
}, () -> asEditHtml());
|
||||
}
|
||||
if (!fessConfig.validateIndexDoubleFields(form.doc)) {
|
||||
List<String> invalidDoubleFields = fessConfig.invalidIndexDoubleFields(form.doc);
|
||||
throwValidationError(messages -> {
|
||||
messages.addErrorsCrudFailedToCreateInstance("doc." + invalidDoubleFields.get(0));
|
||||
}, () -> asEditHtml());
|
||||
}
|
||||
}
|
||||
|
||||
protected void validateUpdateFields(final EditForm form) {
|
||||
|
||||
if (!fessConfig.validateIndexRequiredFields(form.doc)) {
|
||||
List<String> invalidRequiredFields = fessConfig.invalidIndexRequiredFields(form.doc);
|
||||
throwValidationError(messages -> {
|
||||
messages.addErrorsCrudCouldNotFindCrudTable("doc." + invalidRequiredFields.get(0), form.docId);
|
||||
}, () -> asEditHtml());
|
||||
}
|
||||
|
||||
if (!fessConfig.validateIndexArrayFields(form.doc)) {
|
||||
List<String> invalidArrayFields = fessConfig.invalidIndexArrayFields(form.doc);
|
||||
throwValidationError(messages -> {
|
||||
messages.addErrorsCrudCouldNotFindCrudTable("doc." + invalidArrayFields.get(0), form.docId);
|
||||
}, () -> asEditHtml());
|
||||
}
|
||||
if (!fessConfig.validateIndexDateFields(form.doc)) {
|
||||
List<String> invalidDateFields = fessConfig.invalidIndexDateFields(form.doc);
|
||||
throwValidationError(messages -> {
|
||||
messages.addErrorsCrudCouldNotFindCrudTable("doc." + invalidDateFields.get(0), form.docId);
|
||||
}, () -> asEditHtml());
|
||||
}
|
||||
if (!fessConfig.validateIndexIntegerFields(form.doc)) {
|
||||
List<String> invalidIntegerFields = fessConfig.invalidIndexIntegerFields(form.doc);
|
||||
throwValidationError(messages -> {
|
||||
messages.addErrorsCrudCouldNotFindCrudTable("doc." + invalidIntegerFields.get(0), form.docId);
|
||||
}, () -> asEditHtml());
|
||||
}
|
||||
if (!fessConfig.validateIndexLongFields(form.doc)) {
|
||||
List<String> invalidLongFields = fessConfig.invalidIndexLongFields(form.doc);
|
||||
throwValidationError(messages -> {
|
||||
messages.addErrorsCrudCouldNotFindCrudTable("doc." + invalidLongFields.get(0), form.docId);
|
||||
}, () -> asEditHtml());
|
||||
}
|
||||
if (!fessConfig.validateIndexFloatFields(form.doc)) {
|
||||
List<String> invalidFloatFields = fessConfig.invalidIndexFloatFields(form.doc);
|
||||
throwValidationError(messages -> {
|
||||
messages.addErrorsCrudCouldNotFindCrudTable("doc." + invalidFloatFields.get(0), form.docId);
|
||||
}, () -> asEditHtml());
|
||||
}
|
||||
if (!fessConfig.validateIndexDoubleFields(form.doc)) {
|
||||
List<String> invalidDoubleFields = fessConfig.invalidIndexDoubleFields(form.doc);
|
||||
throwValidationError(messages -> {
|
||||
messages.addErrorsCrudCouldNotFindCrudTable("doc." + invalidDoubleFields.get(0), form.docId);
|
||||
}, () -> asEditHtml());
|
||||
}
|
||||
}
|
||||
|
||||
// ===================================================================================
|
||||
// JSP
|
||||
// =========
|
||||
|
|
|
@ -51,7 +51,6 @@ import org.lastaflute.web.validation.RequiredValidator;
|
|||
import org.lastaflute.web.validation.theme.typed.DoubleTypeValidator;
|
||||
import org.lastaflute.web.validation.theme.typed.FloatTypeValidator;
|
||||
import org.lastaflute.web.validation.theme.typed.IntegerTypeValidator;
|
||||
import org.lastaflute.web.validation.theme.typed.LocalDateTimeTypeValidator;
|
||||
import org.lastaflute.web.validation.theme.typed.LongTypeValidator;
|
||||
|
||||
public interface FessProp {
|
||||
|
@ -1070,9 +1069,15 @@ public interface FessProp {
|
|||
}
|
||||
|
||||
public default boolean validateIndexArrayFields(final Map<String, Object> source) {
|
||||
return invalidIndexArrayFields(source).isEmpty();
|
||||
}
|
||||
|
||||
public default List<String> invalidIndexArrayFields(final Map<String, Object> source) {
|
||||
// TODO always returns empty list
|
||||
return stream(getIndexAdminArrayFields().split(",")).get(
|
||||
stream -> stream.filter(StringUtil::isNotBlank).map(s -> s.trim())
|
||||
.allMatch(s -> source.get(s) instanceof String[] || source.get(s) instanceof List));
|
||||
stream -> stream.filter(StringUtil::isNotBlank).map(s -> s.trim()).filter(s -> isNonEmptyValue(source.get(s)))
|
||||
.filter(s -> false) // TODO
|
||||
.collect(Collectors.toList()));
|
||||
}
|
||||
|
||||
String getIndexAdminDateFields();
|
||||
|
@ -1090,10 +1095,22 @@ public interface FessProp {
|
|||
}
|
||||
|
||||
public default boolean validateIndexDateFields(final Map<String, Object> source) {
|
||||
final LocalDateTimeTypeValidator dateValidator = new LocalDateTimeTypeValidator();
|
||||
return invalidIndexDateFields(source).isEmpty();
|
||||
}
|
||||
|
||||
public default List<String> invalidIndexDateFields(final Map<String, Object> source) {
|
||||
return stream(getIndexAdminDateFields().split(",")).get(
|
||||
stream -> stream.filter(StringUtil::isNotBlank).map(s -> s.trim())
|
||||
.allMatch(s -> dateValidator.isValid((String) source.get(s), null)));
|
||||
stream -> stream.filter(StringUtil::isNotBlank).map(s -> s.trim()).filter(s -> isNonEmptyValue(source.get(s)))
|
||||
.filter(s -> !validateDateTimeString((String) source.get(s))).collect(Collectors.toList()));
|
||||
}
|
||||
|
||||
public default boolean validateDateTimeString(final String str) {
|
||||
try {
|
||||
FessFunctions.parseDate(str);
|
||||
return true;
|
||||
} catch (Exception e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
String getIndexAdminIntegerFields();
|
||||
|
@ -1111,10 +1128,14 @@ public interface FessProp {
|
|||
}
|
||||
|
||||
public default boolean validateIndexIntegerFields(final Map<String, Object> source) {
|
||||
return invalidIndexIntegerFields(source).isEmpty();
|
||||
}
|
||||
|
||||
public default List<String> invalidIndexIntegerFields(final Map<String, Object> source) {
|
||||
final IntegerTypeValidator integerValidator = new IntegerTypeValidator();
|
||||
return stream(getIndexAdminIntegerFields().split(",")).get(
|
||||
stream -> stream.filter(StringUtil::isNotBlank).map(s -> s.trim())
|
||||
.allMatch(s -> integerValidator.isValid((String) source.get(s), null)));
|
||||
stream -> stream.filter(StringUtil::isNotBlank).map(s -> s.trim()).filter(s -> isNonEmptyValue(source.get(s)))
|
||||
.filter(s -> !integerValidator.isValid((String) source.get(s), null)).collect(Collectors.toList()));
|
||||
}
|
||||
|
||||
String getIndexAdminLongFields();
|
||||
|
@ -1132,10 +1153,14 @@ public interface FessProp {
|
|||
}
|
||||
|
||||
public default boolean validateIndexLongFields(final Map<String, Object> source) {
|
||||
return invalidIndexLongFields(source).isEmpty();
|
||||
}
|
||||
|
||||
public default List<String> invalidIndexLongFields(final Map<String, Object> source) {
|
||||
final LongTypeValidator longValidator = new LongTypeValidator();
|
||||
return stream(getIndexAdminLongFields().split(",")).get(
|
||||
stream -> stream.filter(StringUtil::isNotBlank).map(s -> s.trim())
|
||||
.allMatch(s -> longValidator.isValid((String) source.get(s), null)));
|
||||
stream -> stream.filter(StringUtil::isNotBlank).map(s -> s.trim()).filter(s -> isNonEmptyValue(source.get(s)))
|
||||
.filter(s -> !longValidator.isValid((String) source.get(s), null)).collect(Collectors.toList()));
|
||||
}
|
||||
|
||||
String getIndexAdminFloatFields();
|
||||
|
@ -1153,10 +1178,14 @@ public interface FessProp {
|
|||
}
|
||||
|
||||
public default boolean validateIndexFloatFields(final Map<String, Object> source) {
|
||||
return invalidIndexFloatFields(source).isEmpty();
|
||||
}
|
||||
|
||||
public default List<String> invalidIndexFloatFields(final Map<String, Object> source) {
|
||||
final FloatTypeValidator floatValidator = new FloatTypeValidator();
|
||||
return stream(getIndexAdminFloatFields().split(",")).get(
|
||||
stream -> stream.filter(StringUtil::isNotBlank).map(s -> s.trim())
|
||||
.allMatch(s -> floatValidator.isValid((String) source.get(s), null)));
|
||||
stream -> stream.filter(StringUtil::isNotBlank).map(s -> s.trim()).filter(s -> isNonEmptyValue(source.get(s)))
|
||||
.filter(s -> !floatValidator.isValid((String) source.get(s), null)).collect(Collectors.toList()));
|
||||
}
|
||||
|
||||
String getIndexAdminDoubleFields();
|
||||
|
@ -1174,10 +1203,14 @@ public interface FessProp {
|
|||
}
|
||||
|
||||
public default boolean validateIndexDoubleFields(final Map<String, Object> source) {
|
||||
return invalidIndexDoubleFields(source).isEmpty();
|
||||
}
|
||||
|
||||
public default List<String> invalidIndexDoubleFields(final Map<String, Object> source) {
|
||||
final DoubleTypeValidator doubleValidator = new DoubleTypeValidator();
|
||||
return stream(getIndexAdminDoubleFields().split(",")).get(
|
||||
stream -> stream.filter(StringUtil::isNotBlank).map(s -> s.trim())
|
||||
.allMatch(s -> doubleValidator.isValid((String) source.get(s), null)));
|
||||
stream -> stream.filter(StringUtil::isNotBlank).map(s -> s.trim()).filter(s -> isNonEmptyValue(source.get(s)))
|
||||
.filter(s -> !doubleValidator.isValid((String) source.get(s), null)).collect(Collectors.toList()));
|
||||
}
|
||||
|
||||
public default Map<String, Object> convertToEditableDoc(final Map<String, Object> source) {
|
||||
|
@ -1220,7 +1253,6 @@ public interface FessProp {
|
|||
|
||||
public default Map<String, Object> convertToStorableDoc(final Map<String, Object> source) {
|
||||
|
||||
final RequiredValidator requiredValidator = new RequiredValidator();
|
||||
final Set<String> arrayFieldSet = getIndexAdminArrayFieldSet();
|
||||
final Set<String> dateFieldSet = getIndexAdminDateFieldSet();
|
||||
final Set<String> integerFieldSet = getIndexAdminIntegerFieldSet();
|
||||
|
@ -1231,7 +1263,7 @@ public interface FessProp {
|
|||
return source
|
||||
.entrySet()
|
||||
.stream()
|
||||
.filter(e -> requiredValidator.isValid(e.getValue(), null))
|
||||
.filter(e -> isNonEmptyValue(e.getValue()))
|
||||
.map(e -> {
|
||||
final String key = e.getKey();
|
||||
Object value = e.getValue();
|
||||
|
@ -1254,14 +1286,23 @@ public interface FessProp {
|
|||
return new Pair<String, Object>(key, value);
|
||||
}).collect(Collectors.toMap(Pair::getFirst, Pair::getSecond));
|
||||
}
|
||||
|
||||
|
||||
String getIndexAdminRequiredFields();
|
||||
|
||||
public default boolean validateIndexRequiredFields(final Map<String, Object> source) {
|
||||
return invalidIndexRequiredFields(source).isEmpty();
|
||||
}
|
||||
|
||||
public default List<String> invalidIndexRequiredFields(final Map<String, Object> source) {
|
||||
final RequiredValidator requiredValidator = new RequiredValidator();
|
||||
return stream(getIndexAdminRequiredFields().split(",")).get(
|
||||
stream -> stream.filter(StringUtil::isNotBlank).map(s -> s.trim())
|
||||
.allMatch(s -> requiredValidator.isValid(source.get(s), null)));
|
||||
.filter(s -> !requiredValidator.isValid(source.get(s), null)).collect(Collectors.toList()));
|
||||
}
|
||||
|
||||
public default boolean isNonEmptyValue(final Object value) {
|
||||
final RequiredValidator requiredValidator = new RequiredValidator();
|
||||
return requiredValidator.isValid(value, null);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -82,35 +82,40 @@
|
|||
<label for="doc_id" class="col-sm-3 control-label">doc_id</label>
|
||||
<div class="col-sm-9">
|
||||
<la:errors property="doc.doc_id" />
|
||||
<la:text property="doc.doc_id" styleClass="form-control" />
|
||||
<la:text property="doc.doc_id" styleClass="form-control"
|
||||
required="required" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="url" class="col-sm-3 control-label">url</label>
|
||||
<div class="col-sm-9">
|
||||
<la:errors property="doc.url" />
|
||||
<la:text property="doc.url" styleClass="form-control" />
|
||||
<la:text property="doc.url" styleClass="form-control"
|
||||
required="required" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="title" class="col-sm-3 control-label">title</label>
|
||||
<div class="col-sm-9">
|
||||
<la:errors property="doc.title" />
|
||||
<la:text property="doc.title" styleClass="form-control" />
|
||||
<la:text property="doc.title" styleClass="form-control"
|
||||
required="required" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="role" class="col-sm-3 control-label">role</label>
|
||||
<div class="col-sm-9">
|
||||
<la:errors property="doc.role" />
|
||||
<la:textarea property="doc.role" styleClass="form-control" />
|
||||
<la:textarea property="doc.role" styleClass="form-control"
|
||||
required="required" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="boost" class="col-sm-3 control-label">boost</label>
|
||||
<div class="col-sm-9">
|
||||
<la:errors property="doc.boost" />
|
||||
<la:text property="doc.boost" styleClass="form-control" />
|
||||
<la:text property="doc.boost" styleClass="form-control"
|
||||
required="required" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
|
|
Loading…
Add table
Reference in a new issue