3

在 JSF2 中有什么方法可以避免表单提交,或者在提交表单时不做任何事情?

我们在一个表单中有几个输入字段(20 个输入字段),其中填充了一些默认值,如果没有更改值,那么我们不想提交表单。

JSF中有什么直接的方法可以实现这一点吗?

<h:form id="summaryForm" prependId="false">
     <h:inputText id="inputField1" value="#{summaryBean.inputFieldValue1}" />
     <h:inputText id="inputField2" value="#{summaryBean.inputFieldValue2}" />
     <h:inputText id="inputField3" value="#{summaryBean.inputFieldValue3}" />
     <h:inputText id="inputField4" value="#{summaryBean.inputFieldValue4}" />
     <h:inputText id="inputField5" value="#{summaryBean.inputFieldValue5}" />
     <h:commandButton action="#{summaryBean.submitSummary}" />
</h:form>
4

2 回答 2

2

简短的回答是否定的,在普通的 JSF 中你不能这样做。不过,您可以在客户端使用一些 JavaScript 和jQuery来完成。

... include jQuery somewhere here ...

<script>
var anyInputChanged = false;
var checkIfAnyValueChanged = function(){ return anyInputChanged; };
(function($) {
    $(function() {
        // set variable anyInputChanged to TRUE on event 'onchange',
        //    for the fields with class "submitOnlyIfChanged"
        $('.submitOnlyChanged').change(function(){ anyInputChanged = true; });
    });
})(jQuery);
</script>

<h:form id="summaryForm" prependId="false">
    <!-- set up all the fields with the class "submitOnlyIfChanged" -->
    <h:inputText class="submitOnlyIfChanged" id="inputField1"
       value="#{summaryBean.inputFieldValue1}" />
    <h:inputText class="submitOnlyIfChanged" id="inputField2"
       value="#{summaryBean.inputFieldValue2}" />
    <h:inputText class="submitOnlyIfChanged" id="inputField3"
       value="#{summaryBean.inputFieldValue3}" />

    <!-- set up a check if any field was changed on button click -->
    <h:commandButton onclick="return checkIfAnyValueChanged();"
       action="#{summaryBean.submitSummary}" />
</h:form>
于 2012-07-05T12:19:53.577 回答
0

简单的方法。

var allFields = document['formName'].elements;
var submit = document.getElementById("submit");
submit.disabled  = true;
var fieldsValue = [];
var x;
var y=0;
for( var i=0; i<allFields.length; i++ ){
    fieldsValue[i] = document.forms["formName"][allFields[i].name].value;
    document.getElementsByName(allFields[i].name)[0].addEventListener('input', function (evt) {
        x = fieldsValue.indexOf(this.value);
        x < 0 ? y = y+1 : y = y-1;
        y > 0 ? submit.disabled  = false : submit.disabled  = true;
    });

}
于 2019-08-11T07:49:21.010 回答