如何阻止在Liferay 5.2.3中提交空表单字段?

如何阻止在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() {

提交表单时,我也会得到零值的空字段。我只想接收已填充的字段。使用LR 5.2.3

提前谢谢! 阿迪亚

更新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>

阻止表单提交没有值的字段的唯一方法是使用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;'停止提交空字段,但无法使其工作。