在 html 表单的构造函数中使用枚举创建 java object
Creating java object with enum in constructor from html form
我有 java class 这样的:
public class Action{
private String title;
private String description;
private ActionState actionState;
public Action(){};
public Action(String title, String description, ActionState actionState)
this.title = title;
this.description = description;
this.actionState = actionState;
}
public String getTitle() {
return title;
}
public String getDescription() {
return description;
}
public ActionState getActionState() {
return actionState;
}
}
和控制器:
@RequestMapping(value = "/new/addAction", method = RequestMethod.POST)
public @ResponseBody void addAction(@RequestBody Action action){
actionService.add(action);
}
@RequestMapping(value = "/new/actionStates", method = RequestMethod.GET)
@ResponseBody
public List<String> returnActionsStates(){
return actionService.enumToStringList(ActionState.class);
}
首先负责将 object 写入数据库,其次将我的 ENUMS 名称发送到 angular 控制器
枚举 class 看起来像这样:
public enum ActionState {
CREATED,
OPENED,
CLOSED
}
这里是 angular 控制器
app.controller('actionController',function ($scope, $http) {
$scope.addAction = function(action){
$scope.action = {};
$http.post('actions/new/addAction', action).success(function(){
$scope.action.title='';
$scope.action.description='';
})
}
$scope.getActionStates = function() {
$http.get('actions/new/actionStates').success(function(actionTypesState){
$scope.states = actionTypesState;
})
}
最后html形式
<b>Ttitle</b><input type="text" data-ng-model="action.title">
<br>
<b>Description</b><input type="text" data-ng-model="action.description">
<div data-ng-init="getActionStates()">
<b>Action State</b> <select id="actionState">
<option value="">-- choose--</option>
<option data-ng-repeat="state in states" value="{{state}}">{{state}}</option>
</select><br>
</div>
<br>
<button data-ng-click="addAction(action)">submit</button>
它的作品的标题和描述。我的意思是我的 addAction
控制器中的 Action
object 的标题值与我在 html 表单中输入的标题值相同,描述相同。
问题是:如何使它以与我的 enum
值相同的方式工作?
我知道我可以只发送带有枚举名称的 String
,然后使用 valueOf
方法在控制器中创建它。但是我想自动创建整个 object :).
如有任何帮助,我将不胜感激。
如果有人想知道,Spring 会自动将 JSON 转换为 ENUM。
这里的问题是 html 代码,它根本没有发送 JSON。
使用以下代码可以正常工作
<div data-ng-init="getActionStates()">
<b>Action State</b> <select data-ng-model="action.actionState" data-ng-options="actionState for (id, actionState) in states">
<option value="">{{neutralActionState}}</option>
</select>
</div>
我有 java class 这样的:
public class Action{
private String title;
private String description;
private ActionState actionState;
public Action(){};
public Action(String title, String description, ActionState actionState)
this.title = title;
this.description = description;
this.actionState = actionState;
}
public String getTitle() {
return title;
}
public String getDescription() {
return description;
}
public ActionState getActionState() {
return actionState;
}
}
和控制器:
@RequestMapping(value = "/new/addAction", method = RequestMethod.POST)
public @ResponseBody void addAction(@RequestBody Action action){
actionService.add(action);
}
@RequestMapping(value = "/new/actionStates", method = RequestMethod.GET)
@ResponseBody
public List<String> returnActionsStates(){
return actionService.enumToStringList(ActionState.class);
}
首先负责将 object 写入数据库,其次将我的 ENUMS 名称发送到 angular 控制器
枚举 class 看起来像这样:
public enum ActionState {
CREATED,
OPENED,
CLOSED
}
这里是 angular 控制器
app.controller('actionController',function ($scope, $http) {
$scope.addAction = function(action){
$scope.action = {};
$http.post('actions/new/addAction', action).success(function(){
$scope.action.title='';
$scope.action.description='';
})
}
$scope.getActionStates = function() {
$http.get('actions/new/actionStates').success(function(actionTypesState){
$scope.states = actionTypesState;
})
}
最后html形式
<b>Ttitle</b><input type="text" data-ng-model="action.title">
<br>
<b>Description</b><input type="text" data-ng-model="action.description">
<div data-ng-init="getActionStates()">
<b>Action State</b> <select id="actionState">
<option value="">-- choose--</option>
<option data-ng-repeat="state in states" value="{{state}}">{{state}}</option>
</select><br>
</div>
<br>
<button data-ng-click="addAction(action)">submit</button>
它的作品的标题和描述。我的意思是我的 addAction
控制器中的 Action
object 的标题值与我在 html 表单中输入的标题值相同,描述相同。
问题是:如何使它以与我的 enum
值相同的方式工作?
我知道我可以只发送带有枚举名称的 String
,然后使用 valueOf
方法在控制器中创建它。但是我想自动创建整个 object :).
如有任何帮助,我将不胜感激。
如果有人想知道,Spring 会自动将 JSON 转换为 ENUM。 这里的问题是 html 代码,它根本没有发送 JSON。 使用以下代码可以正常工作
<div data-ng-init="getActionStates()">
<b>Action State</b> <select data-ng-model="action.actionState" data-ng-options="actionState for (id, actionState) in states">
<option value="">{{neutralActionState}}</option>
</select>
</div>