提交表单时,我也得到零值的空字段。我想只收到填充的字段。使用LR 5.2.3。
提前致谢! 埃迪雅
UPDATE(Web表单的view.jsp文件):
<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>
答案 0 :(得分:0)
阻止表单提交没有值的字段的唯一方法是使用Javascript控制表单提交,遍历所有表单字段并构建数据对象以发布到表单。否则,将提交所有字段。如果您有不同类型的表单字段(选择,无线电,复选框等),这可能会变得复杂,因此让表单处理控制器检查空值/空值实际上更容易也更好。
答案 1 :(得分:0)
我强烈推荐你可以在这里找到的jQuery Validate:
http://bassistance.de/jquery-plugins/jquery-plugin-validation/
它易于使用,非常适合验证任何Web表单。我用它来验证我在Liferay中使用portlet创建的所有表单。开箱即用它提供了很多验证范围,如空字段,电子邮件地址等,但您可以灵活地创建自己的规则!
检查它,因为它比标准JavaScript更干净,更简单,更好!
答案 2 :(得分:0)
您的代码更难以理解。我正在使用jquery验证在Liferay中用于验证表单的代码。
这是正常形式:
<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验证,您必须在</portlet>
标记之前在liferay-portlet.xml中添加fllowing标记。
<header-portlet-javascript> http://ajax.microsoft.com/ajax/jquery.validate/1.7/jquery.validate.min.js </header-portlet-javascript>
希望这会对你有所帮助。感谢。