Struts2 <s:checkbox>'value =“true”如果有Angular`ng-model,则不会呈现为preselect

时间:2016-02-19 09:55:55

标签: angularjs twitter-bootstrap checkbox struts2

我观察到<s:checkbox>渲染以及Bootstrap 3和AngularJS的非常特殊的行为。

我的页面中有两个<s:checkbox>,包含Bootstrap 3样式的一些元素:

<div class="col-md-1">
    <div class="form-group">
        <div class="form-other">
            <label for="activaCheck"><s:text name="actividad.busqueda.activa"/></label>
                <s:checkbox class="form-control" id="activaCheck" name="activaCheck" ng-model="formData.activaCheck" value="true"></s:checkbox>
                <s:checkbox class="form-control" id="activaCheck2" name="activaCheck2"  value="true"></s:checkbox>
        </div>
    </div>
</div>

正如您所看到的,它们之间的唯一区别是,第一个属性为ng-model = "xxx",而第二个属性为value="true"

而且,在我的页面中,它们的呈现方式不同,尽管它们都应该是预选的,因为我设置了<s:checkbox>。当我们在FF中进行检查时,我们可以看到第一个checked="checked"<input type="checkbox" />,但未呈现。我已在Chrome和FF中进行过相同的测试。

我还使用ng-model设置了checked="checked"let something:SKSpriteNode = SKSpriteNode() func start(){ let rotateAction = SKAction.rotateToAngle(CGFloat(M_PI), duration: 10.0) something.runAction(SKAction.sequence([rotateAction])) } 进行了测试,相同:在页面中呈现时未检查。

The first checkbox is "checked", but not rendered.

所以我在考虑AngularJS正在接管Struts 2负责的部分渲染工作,至少在这种情况下。我想从AngularJS的开发者那里得到一些解释,或者这是预期的结果吗?

1 个答案:

答案 0 :(得分:1)

我遇到了未选中复选框的问题。因为它具有ng-model属性,所以输入控件绑定到Angular的$scope。如果范围没有为上面提到的复选框定义属性值,则不会选中它。假设AngularJS一旦初始化就修改DOM。

我创建了plnkr来演示它。

你是对的AngularJS在加载文档后开始工作。此时Struts已完成其工作并将html文档返回给浏览器。现在Angular继续准备页面只在一个页面上工作。两者互为补充,但如果Struts用于渲染

<input type="checkbox" ng-model="checkboxModel.value1" checked="checked">

Angular删除已检查状态,因为该值已注释

angular.module('checkboxExample', [])
.controller('ExampleController', ['$scope', function($scope) {
  $scope.checkboxModel = {
   //value1 : true,
   value2 : 'YES'
 };
}]);