通过struts2动作类从数据库中填充javascript中的Dropdown(使用jtable)

时间:2014-06-19 14:29:15

标签: ajax database drop-down-menu struts2 jtable

您的网站在java网站开发方面给了我很多帮助。我唯一的障碍是通过struts2动作类(使用jtable)在javascript中填充下拉列表。我使用了您的示例代码" AJAX based CRUD operation in Struts 2 using jTable plugin"

在下面的代码片段中,我想要使用ist2类的com.action.JtableAction方法从数据库获取值的下拉列表。

userDefinedJtable.js:

 department : {
            title : 'Department',
            width : '30%',
            edit : true,
                            options : '/WebApplication1/list2Action',
                            list: false
        },
JtableAction中的

list2方法

public String list2() {
            JSONObject obj = new JSONObject();

      obj.put("name", "foo");
      obj.put("num", new Integer(100));
      obj.put("balance", new Double(1000.21));
      obj.put("is_vip", new Boolean(true));

      return obj.toString();    
    }

struts.xml中的声明

<action name="getJSONResult" class="com.action.JtableAction" method="list2">
            <result type="json" />
</action>

但是当我访问

 /WebApplication1/list2Action

我收到此错误

  

HTTP状态404 - 没有为动作com.action.JtableAction定义结果   和结果{&#34;余额&#34;:1000.21,&#34; num&#34;:100,&#34; is_vip&#34;:true,&#34; name&#34;:&#34; foo& #34;}

请帮助我,不管我做得对不对。 而且需要什么。

修改

struts.xml中

<struts>
    <package name="default" extends="json-default">
        <action name="*Action" class="com.action.JtableAction" method="{1}">
            <result type="json">/jTable.jsp</result>
        </action>
        <action name="getJSONResult" class="com.action.JtableAction" method="list">
            <result type="json" />
        </action>
        <action name="getJSONResult" class="com.action.JtableAction" method="list2">
            <result type="json">
                <param name="root">obj</param>
            </result>
        </action>
    </package>
</struts>

1 个答案:

答案 0 :(得分:0)

假设您使用的是Struts2-JSON-plugin,

  1. 在课程级别将您的对象设为私有,为其提供一个getter:

    private JSONObject obj;
    public getJSONObject() { 
        return obj; 
    }
    
  2. 将您的退货类型更改为SUCCESS:

    public String list2() {
      obj = new JSONObject();
    
      obj.put("name", "foo");
      obj.put("num", new Integer(100));
      obj.put("balance", new Double(1000.21));
      obj.put("is_vip", new Boolean(true));
    
      return SUCCESS;
    }
    
  3. 在结果定义中添加root对象参数:

    <action name="getJSONResult" class="com.action.JtableAction" method="list2">
        <result type="json">
            <param name="root">obj</param>
        </result>
    </action>
    
  4. 详细了解其工作原理here

    编辑

    你的struts.xml至少有两个大错误

    1. 如果要返回JSON类型的结果,则无法返回JSP;从您的第一个结果中删除JSON。
    2. 您不能在同一个包中命名两个具有相同名称的操作别名:区分名称以使其有效。
    3. 固定代码:

      <struts>
          <package name="default" extends="json-default">
              <action name="*Action" class="com.action.JtableAction" method="{1}">
                  <result>/jTable.jsp</result>
              </action>
              <action name="getJSONResult1" class="com.action.JtableAction" method="list">
                  <result type="json" />
              </action>
              <action name="getJSONResult2" class="com.action.JtableAction" method="list2">
                  <result type="json">
                      <param name="root">obj</param>
                  </result>
              </action>
          </package>
      </struts>
      

      显然,您需要更改最后添加1或2的getJSONResult来电的名称。

      P.S:考虑使用不同的动作类,以获得更小的动作和更细粒度。