1

我想从Struts2我的 jsp 页面中的 Action 类中检索字段。

我的 JSP JavaScript 代码能够触发它的动作类,但在通过 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;
}
}
4

5 回答 5

0

我没有看到您field在该行中初始化 JS 变量的位置:

$('#field1').html(field);

这里的价值是field什么?

于 2014-06-29T12:22:12.663 回答
0

一切都很好,只需使用这个

 $('#field1').val(data.field);

代替

 $('#field1').html(field);

因为json和url一起返回

http://localhost:8083/yourProjectName/getfield?category=Bird

{“类别”:“鸟”,“场”:“鹰”}

所以要在文本框中获取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>

如果您遇到任何错误或它不起作用,也请告诉我们。

于 2014-06-29T12:25:27.227 回答
0

您应该获得的类别中的值

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 );
});
于 2014-06-29T14:13:14.323 回答
0

它返回 json 对象,所以,你应该执行以下步骤,它工作正常。

json 对象包含键和值,因此需要迭代您的数据。然后设置到您的字段中。

     function(data) {
       //it is Json Data
        $.each(data,function(key,value){
               $('#field1').val(value);
          });
      });
于 2014-06-30T06:45:27.077 回答
0

您是否缺少动作后缀?默认是.action

尝试

$.getJSON("getfield.action",
     {category:JScategory},
      function(data){
        $('#field1').html(field);
 });
于 2014-07-02T07:39:13.210 回答