如何阻止在Liferay 5.2.3中提交空表单字段?
提交表单时,我也会得到零值的空字段。我只想接收已填充的字段。使用LR 5.2.3 提前谢谢! 阿迪亚 更新Web表单的view.jsp文件:如何阻止在Liferay 5.2.3中提交空表单字段?,liferay,Liferay,提交表单时,我也会得到零值的空字段。我只想接收已填充的字段。使用LR 5.2.3 提前谢谢! 阿迪亚 更新Web表单的view.jsp文件: <script type="text/javascript"> jQuery(document).ready( function() { jQuery('#<portlet:namespace />fm').submit( function() {
<script type="text/javascript">
jQuery(document).ready(
function() {
jQuery('#<portlet:namespace />fm').submit(
function() {
var keys = [];
var fieldLabels = {};
var fieldOptional = {};
var fieldValidationErrorMessages = {};
var fieldValidationFunctions = {};
var fieldsMap = {};
<%
int fieldIndex = 1;
fieldLabel = preferences.getValue("fieldLabel" + fieldIndex, StringPool.BLANK);
while ((fieldIndex == 1) || Validator.isNotNull(fieldLabel)) {
fieldOptional = PrefsParamUtil.getBoolean(preferences, request, "fieldOptional" + fieldIndex, false);
String fieldType = preferences.getValue("fieldType" + fieldIndex, "text");
String fieldValidationScript = preferences.getValue("fieldValidationScript" + fieldIndex, StringPool.BLANK);
String fieldValidationErrorMessage = preferences.getValue("fieldValidationErrorMessage" + fieldIndex, StringPool.BLANK);
%>
var key = "<%= HtmlUtil.escape(fieldLabel) %>";
keys[<%= fieldIndex %>] = key;
fieldLabels[key] = "<%= HtmlUtil.escape(fieldLabel) %>";
fieldValidationErrorMessages[key] = "<%= fieldValidationErrorMessage %>";
function fieldValidationFunction<%= fieldIndex %>(currentFieldValue, fieldsMap) {
<c:choose>
<c:when test='<%= Validator.isNotNull(fieldValidationScript) %>'>
<%= fieldValidationScript %>
</c:when>
<c:otherwise>
jQuery(this).children(':input[value=""]').attr("disabled", "disabled");
return true;
</c:otherwise>
</c:choose>
};
fieldOptional[key] = <%= fieldOptional %>;
fieldValidationFunctions[key] = fieldValidationFunction<%= fieldIndex %>;
<c:choose>
<c:when test='<%= fieldType.equals("radio") %>'>
fieldsMap[key] = jQuery("input[name='<portlet:namespace />field<%= fieldIndex %>']:checked").val();
if (!fieldsMap[key]) {
fieldsMap[key] = '';
}
</c:when>
<c:otherwise>
fieldsMap[key] = jQuery("#<portlet:namespace />field<%= fieldIndex %>")[0].value;
</c:otherwise>
</c:choose>
<%
fieldIndex++;
fieldLabel = preferences.getValue("fieldLabel" + fieldIndex, "");
}
%>
.
.
.
);
}
);
</script>
阻止表单提交没有值的字段的唯一方法是使用Javascript控制表单提交,迭代所有表单字段,并构建一个数据对象以发布到表单中。否则,将提交所有字段。如果您有不同类型的表单字段选择、收音机、复选框等,这可能会变得复杂。因此,让表单处理控制器检查空白/空值实际上更容易、更好。阻止表单提交没有值的字段的唯一方法是使用Javascript控制表单提交,遍历所有表单字段并构建一个数据对象以发布到表单中。否则,将提交所有字段。如果您有不同类型的表单字段选择、收音机、复选框等,这可能会变得复杂。因此,让表单处理控制器检查空白/空值实际上更容易、更好。我强烈建议您在此处找到jQuery Validate: 它易于使用,非常适合任何web表单的验证。我用它来验证我用Liferay在Portlet中创建的所有表单。开箱即用,它提供了大量的验证范围,如空字段、电子邮件地址等,但让您可以灵活地创建自己的规则
查看它,因为它比标准JavaScript更干净、更简单、更好 我强烈推荐jQuery Validate,您可以在这里找到: 它易于使用,非常适合任何web表单的验证。我用它来验证我用Liferay在Portlet中创建的所有表单。开箱即用,它提供了大量的验证范围,如空字段、电子邮件地址等,但让您可以灵活地创建自己的规则
查看它,因为它比标准JavaScript更干净、更简单、更好 您的代码更难理解。我给出了在Liferay中使用jquery验证用于验证表单的代码 这是正常形式:
<form action='<portlet:actionURL/>' method="post" id="frmPin">
<table id="pinTable">
<tr>
<td width="170px">
Email:
</td>
<td>
<form:input path="model.userEmail" type="email" id="userEmail"/>
</td>
</tr>
<tr>
<td width="170px">
New Pin:
</td>
<td>
<form:input path="model.pin" maxlength="4" type="number" id="pin"/>
</td>
</tr>
<tr>
<td colspan="2"><input type="submit" id="btnResetPin" value="Reset PIN" name="resetPin"></td>
</tr>
</table>
</form>
javascript中的Jquery验证代码:
<script type="text/javascript">
jQuery("#btnResetPin").click(function(){
jQuery("#frmPin").validate({
rules : {
userEmail : "required",
pin : {
required : true,
maxlength: 4,
minlength: 4
}
},
messages : {
userEmail : {
required: "Please enter the Email Address"
},
pin : {
required: "Please enter the PIN",
maxlength : "Please enter 4 digits PIN",
minlength : "Please enter 4 digits PIN"
}
}
});
})
</script>
这将有助于进行所需和固定长度的输入。您可以使用jquery验证添加更多内容
为了在portlet中启用jquery验证,您必须在标记之前在liferay-portlet.xml中添加fllowing标记
希望这对你有帮助。谢谢。您的代码更难理解。我给出了在Liferay中使用jquery验证用于验证表单的代码 这是正常形式:
<form action='<portlet:actionURL/>' method="post" id="frmPin">
<table id="pinTable">
<tr>
<td width="170px">
Email:
</td>
<td>
<form:input path="model.userEmail" type="email" id="userEmail"/>
</td>
</tr>
<tr>
<td width="170px">
New Pin:
</td>
<td>
<form:input path="model.pin" maxlength="4" type="number" id="pin"/>
</td>
</tr>
<tr>
<td colspan="2"><input type="submit" id="btnResetPin" value="Reset PIN" name="resetPin"></td>
</tr>
</table>
</form>
javascript中的Jquery验证代码:
<script type="text/javascript">
jQuery("#btnResetPin").click(function(){
jQuery("#frmPin").validate({
rules : {
userEmail : "required",
pin : {
required : true,
maxlength: 4,
minlength: 4
}
},
messages : {
userEmail : {
required: "Please enter the Email Address"
},
pin : {
required: "Please enter the PIN",
maxlength : "Please enter 4 digits PIN",
minlength : "Please enter 4 digits PIN"
}
}
});
})
</script>
这将有助于进行所需和固定长度的输入。您可以使用jquery验证添加更多内容
为了在portlet中启用jquery验证,您必须在标记之前在liferay-portlet.xml中添加fllowing标记
希望这对你有帮助。谢谢。是的,JavaScript是最好的选择,但不是最简单的方法。使用第三方JavaScript库(如jQuery)来完成繁重的工作要好得多。使用jQuery,您可以验证所有字段,而不必担心构建数据对象。实际上,我也在尝试使用JavaScript来控制这一点。正如您在上面的更新中所看到的,我添加了此行“jQuerythis.children”:input[value=]”。attrdisabled,disabled;'停止提交空字段,但无法使其工作。是的,JavaScript是最好的选择,但不是最简单的方法。使用第三方JavaScript库(如jQuery)来完成繁重的工作要好得多。使用jQuery,您可以验证所有字段,而不必担心构建数据对象。实际上,我也在尝试使用JavaScript来控制这一点。正如您在上面的更新中所看到的,我添加了此行“jQuerythis.children”:input[value=]”。attrdisabled,disabled;'停止提交空字段,但无法使其工作。