我正在使用angular和struts2 + maven开发项目。 这是我的动作类
package com.ai.action;
import com.ai.model.PersonData;
import com.ai.model.Village;
import com.ai.service.PersonService;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class AngularAction implements Action {
private Map session = ActionContext.getContext().getSession();
private Logger logger = LoggerFactory.getLogger(PersonAction.class);
private List<Village> STSarray;
@Autowired
private PersonService personService;
public String execute()
{
List<Village> STSarray = personService.getAllVillage();
logger.info("save method {}",getSTSarray());
return SUCCESS;
}
public List<Village> getSTSarray() {
return STSarray;
}
public void setSTSarray(List<Village> STSarray) {
this.STSarray = STSarray;
}
}
这里我将数据加载到
名单
使用DAO和hibernate。数据已成功添加到阵列。
然后我想把这些数据发送到jsp页面。
struts.xml中
<action name="angularAction" class="com.ai.action.AngularAction">
<result type="json">
<param name="root">personData</param>
<param name="excludeNullProperties">true</param>
<param name="noCache">true</param>
</result>
</action>
这是我的jsp页面。
<!DOCTYPE html>
<html ng-app="demo">
<head>
<meta charset="ISO-8859-1">
<title>AJAX with Struts 2 using AngularJS</title>
<link href="css/bootstrap.css" rel="stylesheet" />
<link href="css/bootstrap-theme.css" rel="stylesheet" />
<script type="text/javascript" src="scripts/angular.min.js"></script>
<script type="text/javascript">
angular.module("demo", [])
.controller("demoCtrl", function ($scope, $http) {
$scope.loadData = function () {
$http.get("angularAction").success(function (data) {
$scope.person = data;
console.log($scope.person);
});
}
});
</script>
</head>
<body ng-controller="demoCtrl">
<table class="table table-striped">
<p><button data-ng-click="loadData()">
Fetch data from server
</button></p>
<thead>
<tr>
<th>Country</th>
<th>Name</th>
<th>Size</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="item in person">
<td>{{item.country}}</td>
<td>{{item.name}}</td>
<td>{{item.size}}</td>
</tr>
</tbody>
</table>
</body>
</html>
但是 的console.log($ scope.person); 给我null.please帮助。
但是当我的动作类在下面给出时它正常工作。
public class AngularAction implements Action{
//private PersonData personData = new PersonData();
private List<Village> Setstow =new ArrayList<Village>();
private Village village = new Village();
private Map session = ActionContext.getContext().getSession();
private Logger logger = LoggerFactory.getLogger(AngularAction.class);
private PersonData personData = new PersonData();
public String execute() {
personData.setFirstName("Mohaideen");
personData.setLastName("Jamil");
return SUCCESS;
}
public PersonData getPersonData() {
return personData;
}
public void setPersonData(PersonData personData) {
this.personData = personData;
}
根据我的想法,请告诉我如何使用$ http.get(“angularAction”)获取Action类中的List STSarray数据.reccess(function(data)。
答案 0 :(得分:0)
角度代码中有几个错误:
检查“angularAction”是否为正确的网址。这将指向http://yourserver/jsplocation/angularAction之类的东西。例如,如果您的jsp位于http://localhost/pages/page.jsp,则通话将为http://localhost/pages/angularAction 最重要的是,你的angularAction是否以JSON方式返回数组?您可以直接在浏览器中键入angularAction的URL并查看结果
在您设置$scope.itemsdata=data;
的成功函数中,然后调用console.log($scope.person);
,这是一个从未在代码中设置的不同变量
您从未在模块内设置控制器。试试这个
var MyController=function ($scope, $http) {
$scope.getDataFromServer = function() {
$http.get("angularAction").success(
function(data, status, headers, config) {
$scope.itemsdata = data;
console.log($scope.itemsdata);
}).error(function(data, status, headers, config){});
};
};
app.controller('demoCtrl', ["$scope", "$http", MyController]);
在HTML中,您调用“loadData();”但是您在控制器中设置的功能称为“getDataFromServer”
您在<p>
标记内放置了<table>
标记(带有按钮的标记)。你应该把它移出去。
服务器端还有其他错误。您应该在原始代码中将名为STSarray的任何内容称为“personData”,并在“execute”方法中删除类型声明,因为它会使其成为局部变量
package com.ai.action;
import com.ai.model.PersonData;
import com.ai.model.Village;
import com.ai.service.PersonService;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class AngularAction implements Action {
private Map session = ActionContext.getContext().getSession();
private Logger logger = LoggerFactory.getLogger(PersonAction.class);
private List<Village> personData;
@Autowired
private PersonService personService;
public String execute()
{
this.personData = personService.getAllVillage();
logger.info("save method {}",getPersonData());
return SUCCESS;
}
public List<Village> getPersonData() {
return personData;
}
public void setPersonData(List<Village> personData) {
this.personData = personData;
}
}
最好使用浏览器的开发人员工具(或更好的,firebug)来检查下次的javascript代码(即使我假设如果你使用console.log(),你知道如何使用你的javascript控制台,但它应该警告你关于丢失的控制器和其他一切)。