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

时间:2012-08-10 08:17:26

标签: liferay

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

3 个答案:

答案 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>

希望这会对你有所帮助。感谢。