我想从 JSP 页面中的 Struts 2 Action 类中检索字段。
我的 JSP JavaScript 代码能够触发其
Action
类,但在通过 JavaScript 调用假定元素的 ID 时,无法显示从操作类到 JSP 页面的设置字段值。
我的控制台显示一切正常。我已经看过各种例子,不知道为什么我总是遇到同样的问题。我无法弄清楚确切的问题。
这是我的代码:
在
new.jsp
:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>getJSON example</title>
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
</head>
<body>
<s:select label="Category" id="category" name="category" list="{'Select','Animal','Bird'}"></s:select><br/>
<s:textfield label="Field1" id="field1" name="field1" ></s:textfield>
<script type="text/javascript">
$(document).ready(function(){
$(document).on('change','#category',function(){
var JScategory=$(this).val();
$.getJSON("getfield",
{category:JScategory},
function(data){
$('#field1').html(field);
});
}
);
});
</script>
</body>
</html>
在
struts.xml
:
<package name="jsonpack" namespace="/" extends="json-default">
<action name="getfield" class="com.mobile.TestDropDown">
<result type="json" name="success"></result>
</action>
</package>
动作类:
package com.mobile;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.db.AdDAO;
import com.opensymphony.xwork2.ActionSupport;
public class TestDropDown extends ActionSupport{
private String category;
private String field;
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
public String getField() {
return field;
}
public void setField(String field) {
this.field = field;
}
@Override
public String execute() throws Exception {
System.out.println("cat:"+category);
if(category.equals("Animal")){
field="Tiger";
}else if(category.equals("Bird")){
field="Eagle";
}
return SUCCESS;
}
}
我没有看到你在哪里初始化你的
field
JS 变量:
$('#field1').html(field);
这里
field
的值是多少?
您应该从类别中获得的价值
var JScategory=$("#category").val();
并使用
$.getJSON("<s:url namespace='/' action='getfield'/>", { category: JScategory })
.done(function(json) {
console.log( "JSON Data: " + json );
$("#field1").val(json.field);
})
.fail(function( jqxhr, textStatus, error ) {
var err = textStatus + ", " + error;
console.log( "Request Failed: " + err );
});
只要用这个就万事大吉了
$('#field1').val(data.field);
而不是
$('#field1').html(field);
因为返回的json是带有url的
http://localhost:8083/yourProjectName/getfield?category=Bird
是
{"category":"鸟","field":"鹰"}
因此,为了在文本框中获取 Eagle,我们访问变量
data.field
<script type="text/javascript">
$(document).ready(function(){
$(document).on('change','#category',function(){
var JScategory=$(this).val();
$.getJSON("getfield",
{category:JScategory},
function(data){
$('#field1').val(data.field);
});
}
);
});
</script>
如果您遇到任何错误或无法正常工作,也请告诉我们。
它返回json对象,所以,你应该执行以下步骤,它工作正常。
json 对象包含键和值,因此需要迭代您的数据。然后设置到您的字段中。
function(data) {
//it is Json Data
$.each(data,function(key,value){
$('#field1').val(value);
});
});
您是否缺少动作后缀?默认为
.action
尝试
$.getJSON("getfield.action",
{category:JScategory},
function(data){
$('#field1').html(field);
});