【发布时间】:2016-05-05 21:14:42
【问题描述】:
我在表单处理中使用 Struts 2 <s:checkbox />,以及 AngularJS 和 jQuery。
在提交之前,我需要验证,直到现在我们在项目中这样做:
当我们按下提交按钮时,这个函数被调用:
$scope.processForm('myForm', '<s:url value="/form/validate.action" />',
'<s:url value="/form/save.action" />');
在哪里
processForm(formId, validateUrl, submitUrl)
是我们定义的函数:
$scope.processForm = function(form, validateUrl, submitUrl) {
window.scroll(0,0);
ProccessFormService.processStandarForm(form, validateUrl, submitUrl);
};
此外,我们在全球服务中定义了processStandarForm():
angular.module('ourApp').controller('myFormCtrl',
function($scope, $modal, ProccessFormService) {
...
}
在役:
(function() {
angular.module('ourApp').factory('ProccessFormService', ['$http', function($http) {
processStandarForm: function(form, validateUrl, submitUrl) {
this.processForm(form, validateUrl, submitUrl);
},
processForm: function(form, validateUrl, submitUrl, success) {
if ((typeof form) == 'string') {
form = document.getElementById(form);
}
var data = this.form2Object(form);
var ctrl = this;
if (data) {
if (validateUrl) {
$http({
method : 'POST',
url : validateUrl,
data : $.param(data), // pass in data as strings
headers : { 'Content-Type': 'application/x-www-form-urlencoded' }
// set the headers so angular passing info as form data (not request payload)
}).success(function() {
if (!success) {
form.action = submitUrl;
form.submit();
} else {
ctrl.submitAjaxForm(submitUrl, data, success)
}
});
} else if (submitUrl) {
if (!success) {
form.action = submitUrl;
form.submit();
} else {
this.submitAjaxForm(submitUrl, data, success)
}
}
}
},
}
基本上,我们提交了两次表单,首先是验证,然后是提交。
我不明白的是如果我在action类中调试,在validate()的函数中,<s:checkbox />的布尔值始终为真,但在submit()函数中,布尔值正确提交,根据它们被选中/未选中。复选框是这样的:
<div class="col-sm-12 form-checkbox">
<s:checkbox name = "myForm.married"
ng-model = "checkboxModel"
value = "<s:property value='%{myForm.married}'/>"
ng-change = "submitCheckbox();"
ng-init = "checkboxModel= %{myForm.married}"
theme = "simple"
ng-disabled = "anotherFunction()" />
</div>
据我了解,<s:checkbox />中提交的值为fieldValue="xxx",默认为true。所以我这样做是为了在页面加载之前更改每个checkbox 的fieldValue。尽管所有脚本都已执行,但没有任何改变。我仍然在验证中完全正确。
$(document).ready(function(){
$( "input:checkbox" ).each(function(){
var checkbox = $(this);
var checked = checkbox.prop("checked");//sera false/true
if (checked == true){
checkbox.prop("fieldValue", "true");
} else {
checkbox.prop("fieldValue", "false");
}
});
});
那么,我怎样才能在提交和验证中都获得正确的 boolean 值? Angular 服务是否写错了?我真的很怀疑,但我无法弄清楚这个问题。
【问题讨论】:
-
值没有到达目的地。
-
嗨 Roman C,再次感谢。那么我们怎么知道,为什么?你的意思是验证不起作用?但其他输入/选择组合/单选字段在验证中正确获取它们的值。
-
validate操作?你的方法也叫validate吗?改变它。 -
@Aleksandr M 名字只是为公司信息隐私发明的面具:)。 Action 类有另一个名称,但方法名为
validate()。 -
validate是一个特殊的方法,换成别的吧。
标签: jquery angularjs forms checkbox struts2