2

提交表单时,我也得到了零值的空字段。我只想接收填写的字段。使用 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>
4

3 回答 3

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 验证,您必须在您的 liferay-portlet.xml 中添加 flflowing 标记之前的</portlet>标记。

<header-portlet-javascript> http://ajax.microsoft.com/ajax/jquery.validate/1.7/jquery.validate.min.js </header-portlet-javascript>

希望这会帮助你。谢谢。

于 2014-12-22T11:58:48.837 回答
0

阻止表单提交没有值的字段的唯一方法是使用 Javascript 来控制表单提交,遍历所有表单字段并构建一个数据对象以发布到您的表单。否则,将提交所有字段。如果您有不同类型的表单字段(选择、单选、复选框等),这可能会变得复杂,因此让表单处理控制器检查空白/空值实际上更容易更好。

于 2012-08-10T17:21:00.917 回答
0

我强烈推荐你可以在这里找到的 jQuery Validate:

http://bassistance.de/jquery-plugins/jquery-plugin-validation/

它易于使用,非常适合验证任何 Web 表单。我用它来验证我用 Liferay 在 portlet 中创建的所有表单。开箱即用,它提供了很多验证范围,例如空字段、电子邮件地址等,但让您可以灵活地创建自己的规则!

看看它,因为它比标准 JavaScript 更干净、更简单、更好!

于 2012-08-10T18:46:26.990 回答