ext+struts2+jsp整合的问题

是这样的,本来一个项目是用ext+struts2做的。但是现在ext frame中的页面需要用jsp来做。就是说ext框架中嵌套jsp.
现在遇到了一个问题,ext通过ajax提交到 struts2的action之后,jsp页面如何取到这个action中参数的值呢?
用struts2的result 跳转行不通。ext不认这个

ext 提交---struts2 跳转-----jsp页面

1个回答

ajax提交后台的获取参数跟页面跳转获取参数的方法是一样的。只是返回的结果不同,页面跳转返回的结果是html,而ajax返回的结果一般是json字符串,这个跟struts2无关,看一下ajax的原理吧,对你有帮助的。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
ext+struts2+jsp整合的问题

是这样的,本来一个项目是用ext+struts2做的。但是现在ext frame中的页面需要用jsp来做。就是说ext框架中嵌套jsp. 现在遇到了一个问题,ext通过ajax提交到 struts2的action之后,jsp页面如何取到这个action中参数的值呢? 用struts2的result 跳转行不通。ext不认这个 ext 提交---struts2 跳转-----jsp页面

struts2 整合freemarker 使用jsp自定义标签出错

==> assignment: my=JspTaglibs["/WEB-INF/cust_tag.tld"] [on line 2, column 1 in app/notice/noticeList.ftl] ---------- Java backtrace for programmers: ---------- freemarker.template.TemplateModelException: Could not load taglib information at freemarker.ext.jsp.TaglibFactory.get(TaglibFactory.java:184) web.xml 加了 还是不行,困扰我两天了 <servlet> <servlet-name>JSPSupportServlet</servlet-name> <servlet-class>org.apache.struts2.views.JspSupportServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> action 跳转的 ftl 页面加了 <#assign my=JspTaglibs["/WEB-INF/cust_tag.tld"]> 还是不行

ext+struts2 跳转方法的问题。。

我初学ext看到前辈们写的一个方法是document.location = “bookList!export2Excel” 这样能跳转到bookList里面的export2Excel方法。我也一样写了这个方法。 他就跳转到struts.xml里面的input的页面。很奇怪。。我不知道问题出在那里。求前辈们解答。 还有遇到一个问题是, 我在后台把添加和修改写在一起。 所以我用一个事件 //修改信息 harListgrid.on('rowclick',function(harListgrid,rowIndex,event){ var record = harListgrid.getStore().getAt(rowIndex); harInfoForm.getForm().loadRecord(record); harInfoForm.buttons[0].setText('修改'); harInfoForm.buttons[1].setText('取消'); harInfoForm.buttons[1].setHandler(function(){ harInfoForm.buttons[0].setText('添加'); harInfoForm.getForm().reset(); harInfoForm.buttons[1].setText('重置'); }); }); 把添加的字样给改了。。添加的方法是这样: harInfoForm.getForm().doAction('submit',{ url:'/liuycTest3/addOrUpdate.action', method:'post', params:'', success:function(form,action){ if(action.result.msg == 'add'){ Ext.Msg.alert('消息',"添加成功!!"); }else if(action.result.msg == 'update'){ Ext.Msg.alert('消息'," 修改成功!!"); harInfoForm.buttons[0].setText('添加'); } harInfoForm.getForm().reset(); document.location = 'harInfoList.jsp'; }, failure:function(){ Ext.Msg.alert("提示","操作有误!!"); } }); 很奇怪的是添加可以添加。 但是一到修改就直接到failure这边了。。 昨天一前辈帮我用ajax不传递参数能进入到action 后来回家我自己在改成这样: if(this.text=='修改'){ getHarInfoStore(); Ext.Ajax.request({ url:'addOrUpdate.action', params:{ id:harId, parId:parId, code:code, brand:brand, model:model }, success:function(){ } }) }else{ harInfoForm.getForm().doAction('submit',{ url:'/liuycTest3/addOrUpdate.action', method:'post', params:'', success:function(form,action){ if(action.result.msg == 'add'){ Ext.Msg.alert('消息',"添加成功!!"); }else if(action.result.msg == 'update'){ Ext.Msg.alert('消息'," 修改成功!!"); harInfoForm.buttons[0].setText('添加'); } harInfoForm.getForm().reset(); document.location = 'harInfoList.jsp'; }, failure:function(){ Ext.Msg.alert("提示","操作有误!!"); } }); } } }); 还是能添加,但是到修改依然挂掉。。。求解!!!! 我只有三十分。全给了。求解!!!

ext和struts1问题(急)

<p>我的页面代码是:</p> <p> var store1 = new Ext.data.Store({<br>        proxy : new Ext.data.HttpProxy({<br>            url: 'InfohouseMgr.do'<br>        }),</p> <p>        // set up the JsonReader<br>        reader : new Ext.data.JsonReader({<br>            root : 'taskList',<br>           // totalProperty : 'totalSize'<br>        },[<br>         {name: 'ipaddress', type: 'string'},<br>            {name: 'sendmobiles', type: 'string'},<br>            {name: 'sendemail', type: 'string'}<br>        ])<br>    });<br>    store1.load();<br> var dis=new Ext.grid.ColumnModel([<br>  {header:"IP地址",dataIndex:"ipaddress",sortable:true,align:"center"},<br>  {header:"短信接收者",dataIndex:"sendmobiles",sortable:true,align:"center"},<br>  {header:"邮件接收者",dataIndex:"sendemail",sortable:true,align:"center"}<br>  <br> ]);<br> <br> var grid = new Ext.grid.GridPanel({<br>  renderTo:"hello",<br>  title:"表格",<br>  height:200,<br>  width:600,<br>  cm:dis,<br>  store:store1,<br>  autoExpandColumn:2<br> });</p> <p> </p> <p>Action中的代码是:</p> <p>Map map=new Hashtable();<br>  map.put("success", true);<br>  map.put("taskList", list);</p> <p>        JSONObject jsonMap = JSONObject.fromObject(map);<br>        response.getWriter().write(jsonMap.toString());<br>        System.out.println(jsonMap.toString());<br>        request.setAttribute("json", jsonMap.toString());</p> <p> </p> <p>我取到的list能成功的转换成json格式,但是页面上就是出不来。我想问一下大哥大姐一下,帮我看看错误,我都调了一天了,还没有出来,本人技术比较菜,谢谢了</p><br /><strong>问题补充:</strong><br />页面 <br /> <br />var store1 = new Ext.data.Store({ <br /> <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; proxy : new Ext.data.HttpProxy({ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; url: '/nms/infohouse/middle.jsp' <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }), <br /> <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // set up the JsonReader <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reader : new Ext.data.JsonReader({ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; root : 'taskList', <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; totalProperty : 'totalSize' <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },[ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {name: 'ipaddress', type: 'string'}, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {name: 'sendmobiles', type: 'string'}, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {name: 'sendemail', type: 'string'} <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ]) <br />&nbsp;&nbsp;&nbsp; }); <br />&nbsp;&nbsp;&nbsp; store1.load(); <br /> var dis=new Ext.grid.ColumnModel([ <br /> {header:"IP地址",dataIndex:"ipaddress",sortable:true,align:"center"}, <br /> {header:"短信接收者",dataIndex:"sendmobiles",sortable:true,align:"center"}, <br /> {header:"邮件接收者",dataIndex:"sendemail",sortable:true,align:"center"} <br /> <br /> ]); <br /> <br /> var grid = new Ext.grid.GridPanel({ <br /> renderTo:"hello", <br /> title:"表格", <br /> height:200, <br /> width:600, <br /> cm:dis, <br /> store:store1, <br /> autoExpandColumn:2 <br /> }); <br /> <br />action中 <br /> <br />Map map=new Hashtable(); <br /> //map.put("success", true); <br /> map.put("totalSize", list.size()); <br /> map.put("taskList", list); <br /> <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JSONObject jsonMap = JSONObject.fromObject(map); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; response.getWriter().write(jsonMap.toString()); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(jsonMap.toString()); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request.setAttribute("json", jsonMap.toString());<br /><strong>问题补充:</strong><br />后对能够正确的打印出json的值<br /><strong>问题补充:</strong><br />{"totalSize":3,"taskList":[{"dataType":"sqlserver","databaseName":"nms","disPass <br />word":"webnms","disconf_id":2,"disname":"nsm","formeripaddress":"","ipaddress":" <br />10.10.152.28","mon_flag":0,"netlocation":{"bak":"综合客服","id":5,"netname":"综 <br />合客服"},"portnum":23,"sendemail":"","sendmobiles":"","setAlarm":""},{"dataType" <br />:"sqlserver","databaseName":"nms","disPassword":"123123","disconf_id":1,"disname <br />":"23","formeripaddress":"","ipaddress":"10.10.152.11","mon_flag":0,"netlocation <br />":{"bak":"主机管理员","id":3,"netname":"主机管理员"},"portnum":123,"sendemail":" <br />admin","sendmobiles":"admin","setAlarm":""},{"dataType":"sqlserver","databaseNam <br />e":"nms","disPassword":"123","disconf_id":3,"disname":"nsm","formeripaddress":"" <br />,"ipaddress":"10.10.152.29","mon_flag":0,"netlocation":{"bak":"固话网管","id":8, <br />"netname":"固话网管"},"portnum":23,"sendemail":"admin","sendmobiles":"123","setA <br />larm":""}]}<br /><strong>问题补充:</strong><br />以上的数据格式肯定没有问题,我试过,还有一个问题是,我给一个jsp页面加了一个进度条,之后,效果出来了,只是数据全变成乱码了,我加进度条的时候,没有把 <br />&lt;script type="text/javascript" src="&lt;%=request.getContextPath()%&gt;/WEB-SRC/lib/locale/ext-lang-zh_CN.js"&gt;&lt;/script&gt; <br />加进去,其它的都加了,如果加了的话,页面就报错

FileUploadField 选择了一个文件,传到struts2的Action中,显示为null, 是什么问题?

<p>我有个formpanel, 里面有个FileUploadField,选择一个文件后,传到struts2的Action中,但是从调试的显示中看到参数没有传过去,响应的结果为null. </p> <p>我想请大家帮我看看代码怎么改,多谢了</p> <p> </p> <p>MyDesktop.ScriptWindow = Ext.extend(Ext.app.Module, {<br>    id:'script-win',<br>    init : function(){<br>        this.launcher = {<br>            text: 'Script Selection',<br>            iconCls:'tabs',<br>            handler : this.createWindow,<br>            scope: this<br>        }<br>    },</p> <p>    createWindow : function(){<br>        var desktop = this.app.getDesktop();<br>        var win = desktop.getWindow('script-win');<br>        if(!win){<br>            win = desktop.createWindow({<br>                id: 'script-win',<br>                title:'Script Selection',<br>                width:400,<br>                height:450,<br>                iconCls: 'tabs',<br>                shim:false,<br>                animCollapse:false,<br>                border:false,<br>                constrainHeader:true,<br>                layout: 'fit',<br>                items: new Ext.FormPanel({<br>         id:'script',<br>      labelWidth: 70, <br>      frame:true,<br>      bodyStyle:'padding:5px 5px 0',<br>      width: 350,</p> <p><br>      items: [{<br>       xtype:'fieldset',<br>       title: 'Script Load',<br>       collapsible: true,<br>       autoHeight:true,<br>       defaults: {width: 210},<br>       defaultType: 'textfield',<br>       <br>       items :[new Ext.ux.form.FileUploadField({<br>        id: 'upload',<br>        name: 'upload',<br>        emptyText: '',<br>        fieldLabel: 'Script',<br>        allowBlank:false,<br>        buttonText: '',<br>        buttonCfg: {<br>         iconCls: 'tabs'<br>        }<br>       }), <br>       new Ext.form.ComboBox({<br>        id: 'mobile',<br>        name:'mobile',<br>        triggerAction:'all',<br>        fieldLabel: 'Phone',<br>        store: store,<br>        displayField: 'imsi',<br>        valueField: 'ip',<br>        mode:'local',<br>        allowBlank:false,<br>        emptyText: 'Select a phone'<br>       })<br>       ], <br>       buttons: [{<br>        type: 'submit',<br>        text: 'Associate',<br>        handler:function(){<br>         //Ext.Msg.alert("success", Ext.getCmp('upload').getValue());<br>         <br>         if(Ext.getCmp('script').getForm().isValid()){<br>          Ext.getCmp('script').getForm().doAction("submit",{<br>           <a href="/problems/%22scriptLoad.action">url:"scriptLoad.action</a>",<br>           method:"post",<br>           success:function(form,action){<br>            Ext.Msg.alert("Success",action.result.message);<br>           },<br>           failure:function(form, action){<br>            Ext.Msg.alert("Failer",action.result.message);<br>           }<br>          })<br>         }<br>        }<br>       },{<br>        text: 'Cancel',<br>        handler: function(){<br>         Ext.getCmp('upload').reset();<br>         Ext.getCmp('mobile').reset();<br>        }<br>       }]<br>      },<br>      {<br>       xtype:'fieldset',<br>       title: 'Script View',<br>       collapsible: true,<br>       height:250,<br>       labelWidth: 2, <br>       items : new Ext.form.TextArea({<br>        xtype:'textarea',<br>        name: 'script',<br>        anchor: '100% 100%',<br>        disabled: true,<br>        value:'loop-&gt;1:100, CALL -&gt; &lt;TO_BE_DEFINED&gt;:5,  SLEEP -&gt; 2000, END LOOP -&gt; ID=1'<br>       })<br>      }]  <br>    })<br>            });<br>        }<br>        win.show();<br>    }<br>});</p> <p> </p> <p>LoadScriptAction.java</p> <p>public class LoadScriptAction extends ActionSupport{<br> private File upload;<br> private String uploadContentType;<br> private String uploadFileName;<br> private String mobile;<br> private String message;<br> <br> public String getMessage() {<br>  return message;<br> }<br> public void setMessage(String message) {<br>  this.message = message;<br> }<br> public File getUpload() {<br>  return upload;<br> }<br> public void setUpload(File upload) {<br>  this.upload = upload;<br> }<br> public String getUploadContentType() {<br>  return uploadContentType;<br> }<br> public void setUploadContentType(String uploadContentType) {<br>  this.uploadContentType = uploadContentType;<br> }<br> public String getUploadFileName() {<br>  return uploadFileName;<br> }<br> public void setUploadFileName(String uploadFileName) {<br>  this.uploadFileName = uploadFileName;<br> }<br> public String getMobile() {<br>  return mobile;<br> }<br> public void setMobile(String mobile) {<br>  this.mobile = mobile;<br> }<br> <br> public String execute() throws Exception{<br>  message = this.uploadFileName + " " + this.mobile;<br>  return SUCCESS;<br> }<br>}</p> <p>&lt;struts&gt;  <br>    &lt;include file="struts-default.xml"/&gt;  <br>        <br>    &lt;package name="script" extends="json-default"&gt;  <br>        &lt;action name="scriptLoad" class="android.action.LoadScriptAction"&gt;  <br>            &lt;result type="json"/&gt;  <br>        &lt;/action&gt;   <br>    &lt;/package&gt;<br> <br>&lt;/struts&gt;  </p> <p> </p> <p>调试显示: (我要传两个参数过去,一个是我选择的文件,一个是mobile的号码。为什么这里只显示传了一个参数过去?)</p> <p> </p> <table class="netInfoPostParamsTable " border="0" cellspacing="0" cellpadding="0"><tbody class=" "> <tr class="netInfoPostParamsTitle "> <td class=" " colspan="2"> <div class="netInfoPostParams ">参数<span class="netInfoPostContentType ">application/x-www-form-urlencoded</span> </div> </td> </tr> <tr class=" "> <td class="netInfoParamName "><span class=" ">mobile</span></td> <td class="netInfoParamValue "><code class="focusRow subFocusRow ">0610550020</code></td> </tr> </tbody></table> <table class="netInfoPostSourceTable " border="0" cellspacing="0" cellpadding="0"><tbody class=" "> <tr class="netInfoPostSourceTitle "> <td class=" " colspan="2"> <div class="netInfoPostSource ">源代码</div> </td> </tr> <tr class=" "> <td class=" " colspan="2"><code class="focusRow subFocusRow ">mobile=0610550020</code></td> </tr> </tbody></table> <p> </p> <p>响应:</p> <div class="netInfoResponseText netInfoText "> <pre><code class="wrappedText focusRow">{"message":"null 0610550019","mobile":"0610550019","upload":null,"uploadContentType":null,"uploadFileName"</code><code class="wrappedText focusRow">:null}</code></pre> </div>

ext grid 无法显示struts通过action跳转的jsp的<s:property value="jStr" escape=false/>返回

这两天学ext,struts,有个传统的数据交互法。参看这个例子的。 “http://czpae86.iteye.com/blog/632747” 我的困惑是:服务器数据交给action处理,action返回的数据被一个jsp(jsondata.jsp)提取, 然后在js中,ext grid HttpProxy({url:'ExtAction.action',method:'POST'}),...) 这里action return success 然后跳转到那个jsp(jsondata.jsp) 这个jsp有代码“<s:property value="jsonString" escape=false/>” [color=red]问题:[/color]Extgrid 知道读这个“escape="false"的值栈”吗?如果是,我却怎么也显示不了数据!

Ext整合Struts2 如何传泛型值?

我设一个User类,代码如下: [code="java"]public class User{ private String name; private String sex; private String age; private String title; private String expertise; private String maintask; ....get/set方法 }[/code] 然后是接收值的Action [code="java"] public class Test implements Action { private int flag; private List<User> store; private boolean success; public String execute() throws Exception { 处理 } ....get/set方法 } [/code] 页面上我想用Ext.ajax.request来向后台传值 [code="java"] Ext.Ajax.request({ url : 'test.action', success : function(response) { }, params : { flag:1, store:a } }) [/code] 我想知道页面上,store这个参数的值要是怎么样一种格式,才能让后台store正常接收并自动转化呢?

Ext3.0整合Struts2,一直只进入失败的方法

问题如题,核心代码如下: Struts.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="default" extends="json-default" namespace="/"> <action name="myloginext" class="com.zheshou.action.myLoginExtAction" method="execute"> <result type="json"> <!-- <param name="includeProperties"> --> <!-- success,url--> <!-- </param>--> </result> </action> </package> </struts> package com.zheshou.action; import com.opensymphony.xwork2.ActionSupport; public class myLoginExtAction extends ActionSupport{//2.ActionSupport必须有这个才行.但是可以不用Execute了 private String user; private String pass; private String url; private boolean success; //get set省略 @Override public String execute(){ success=true; url="main.html"; return null; } } buttons : [ { text : '登陆', handler : function() { form.getForm().submit( { waitTitle:"请稍等", waitMsg:'正在提交,请稍等...', // ajax way //url : 'login.jsp', url:"myloginext.action", method:'POST', success : function(form,action) { Ext.MessageBox.alert("1",action.result.url);// window.location.href = action.result.url; }, failure:function(form,action){ Ext.MessageBox.alert("同志,出错了","出错了哈哈"); } });

使用Struts2处理ext.form提交后的返回问题,请指教

我使用的是Struts2+Ext2.2,向实现Ext.form提交后台保存的功能,使用的是jsonplugin, var form = formPanel.getForm(); form.submit({ url:'userAction.action', param:{actionMethod:'save'}, method:post, waitMsg:'数据载入中……', successProperty:'success' success:function(form,action){ Ext.MessageBox.alert("Message", "Success"); }, failture:function(form,action){ Ext.MessageBox.alert("Error", "Failture"); } }); 后台: Boolean success = false; public String execute() throws Exceptions{ if (getActionMethod().equals('save')) { success = userService.save();//userService.save()成功返回True,失败返回False } return SUCCESS; } public void setSuccess(Boolean success){ this.success = success; } public boolean getSuccess() { } } 我指定了成功属性,当Success=TRUE是能先是Message:SUCCESS,但当success=FALSE时,确不执行failture方法,这是为什么,能不能使其在success=FALSE时,执行failture

struts1.2页面通过ext获取json数据问题,为什么没有数据?

这是我的代码,望各位大哥大姐们 看看,帮我找找问题,谢谢了! 我 url: 'login.do?method=alluser',这句代码没有执行,因为后台没有打印, 页面的ext代码: Ext.onReady(function(){ Ext.state.Manager.setProvider(new Ext.state.CookieProvider()); // example of custom renderer function var store = new Ext.data.JsonStore({ autoload:true, proxy: new Ext.data.HttpProxy({ url: 'login.do?method=alluser', method:'post', reader: new Ext.data.JsonReader({ totalProperty:'pageInfo', root:'data', fields:[ {name: 'userid',mapping:'data.userid'}, {name: 'groupid',mapping:'data.groupid'}, {name: 'username',mapping:'data.username'}, {name: 'pwd', mapping:'data.pwd'}, {name: 'store',mapping: 'data.store'}, {name: 'rfset', mapping: 'data.rfset'} ] }) }) }); // create the Grid var grid = new Ext.grid.GridPanel({ store: store, columns: [ {id:'userid',header: "userid", width: 60, sortable: true, dataIndex: 'userid'}, {header: "groupid", width: 60, sortable: true, dataIndex: 'groupid'}, {header: "username", width:60, sortable: true, dataIndex: 'username'}, {header: "pwd", width:60, sortable: true, dataIndex: 'pwd'}, {header: "store", width: 60, sortable: true, dataIndex: 'store'}, {header: "rfset", width: 60, sortable: true, dataIndex: 'rfset'} ], autoWidth:false, width:780, autoHeight:true, bbar: new Ext.PagingToolbar({ pageSize: 25, store: store, displayInfo: true, displayMsg: ' 本页显示从{0} 到 {1} 条,共 {2} 条数据', emptyMsg: "没有可以显示的数据" }) }); grid.render('grid-example'); grid.getSelectionModel().selectFirstRow(); }); JavaAction代码: public ActionForward alluser(ActionMapping mapping, ActionForm form, HttpServletRequest req, HttpServletResponse res) throws IOException{ ILoginservice inter=(Loginservice)this.getBean("loginDao"); List users=inter.findAll(Userinfo.class); System.out.print("====================================="); JSONArray arr=new JSONArray(); String tabstring=""; for(Object o : users){ Userinfo u=(Userinfo)o; arr.add(u); } try { JSONObject object=new JSONObject(); object.put("data", arr); object.put("pageInfo",users.size()); tabstring = object.toString(); } catch (Exception e) { tabstring = "ss"; } System.out.println("++++++++++++++++"+tabstring); res.getWriter().write(tabstring); return mapping.findForward("userlist"); }

Ext +struts2 grid怎么做条件查询

各位好: 我现在用Ext+Struts2做画面,画面上有一排检索条件,我怎么才能把这些条件传到后台struts的Action中呢?

关于html表单+ext combobox+struts2的值传递问题

请问ext的 combobox下拉列表的值是否能作为html表单的一部分一起提交呢。并且提交给struts2的action,自动映射为action的属性,action里面的属性一直娶不到combobox的值啊。。。。请大牛指教。。。。 我已经用了hiddenName属性了。。可是不行啊。。

请大家帮忙看看我的json数据和struts2后台交互的问题

搞了很久,就是不出数据,快崩溃了,action中System.out.println();没问题,json的格式也是正确的,但在js里面就是死活取不到,请大家帮忙看看,谢谢了!! <br />js: <br />Ext.onReady(function(){ <br />&nbsp;&nbsp;&nbsp; var ds = new Ext.data.JsonStore({ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; proxy : new Ext.data.HttpProxy({url:'List.action',method:'POST'}), <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reader: new Ext.data.JsonReader({ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; successProperty: "successproperty", <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; totalProperty: 'totalProperty', <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; root: 'root', <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fields: [ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'userId','userName','password','email' <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ] <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }) <br />&nbsp;&nbsp;&nbsp; }); <br />&nbsp;&nbsp;&nbsp; //alert(ds.getCount()) ;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; //alert(ds.getAt(0).get("userName")) ; <br />&nbsp;&nbsp;&nbsp; var colModel = new Ext.grid.ColumnModel([ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {id:'title',header:'ID',width:50,sortable:true,dataIndex:'userId'}, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {header:'用户名', width:100,sortable:true,dataIndex:'userName'}, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {header:'密码明码',width:100,sortable:true,dataIndex:'password'}, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {header:'电子邮件',width:100,sortable:true,dataIndex:'email'} <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ]); <br />&nbsp;&nbsp;&nbsp; var tb = new Ext.Toolbar("north-div"); <br />&nbsp;&nbsp;&nbsp; tb.add({ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; text: '添加', <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tooltip:'Add a new row', <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iconCls:'add', <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; handler: newUser <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; text: '编辑', <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tooltip:'edit a new row', <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iconCls:'option', <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; handler: editUser <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; text: '删除', <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tooltip:'delete a new row', <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iconCls:'remove', <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; handler: delUser <br />&nbsp;&nbsp;&nbsp; }); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; var grid = new Ext.grid.GridPanel({ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; border:false, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; region:'south', <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; height:500, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; loadMask: true, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; el:'center', <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; title:'用户列表', <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; store: ds, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cm: colModel, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; autoScroll: true, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bbar: new Ext.PagingToolbar({ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pageSize: 20, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; store: ds, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; displayInfo: true, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; displayMsg: '第{0} 到 {1} 条数据 共{2}条', <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; emptyMsg: "没有数据" <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }); <br />&nbsp;&nbsp;&nbsp; var viewport = new Ext.Viewport({ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; layout:'border', <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; items:[{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; border:false, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; region:'north', <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; contentEl:'north-div', <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tbar:tb, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; height:26 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; grid <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ]} <br />&nbsp;&nbsp;&nbsp; ); <br />&nbsp;&nbsp;&nbsp; ds.load({params:{start:0, limit:20}}); <br />}); <br /> <br />action: <br /> <br />package part1.action; <br /> <br />import java.io.PrintWriter; <br />import java.util.List; <br />import java.util.Map; <br /> <br />import javax.servlet.http.HttpServletRequest; <br />import javax.servlet.http.HttpServletResponse; <br /> <br />import net.sf.json.JSONArray; <br />import net.sf.json.JSONObject; <br /> <br />import org.apache.struts2.ServletActionContext; <br /> <br />import part1.model.Appuser; <br /> <br />import com.opensymphony.xwork2.ActionContext; <br /> <br />public class ListAction extends BaseAction { <br /> <br /> String jsonString; <br /> <br /> public String getJsonString() { <br /> return jsonString; <br /> } <br /> <br /> public void setJsonString(String jsonString) { <br /> this.jsonString = jsonString; <br /> } <br /> <br /> public String execute() throws Exception{ <br /> <br /> ActionContext ctx = ActionContext.getContext(); <br /> Map session = ActionContext.getContext().getSession(); <br /> HttpServletRequest request = (HttpServletRequest)ctx.get(ServletActionContext.HTTP_REQUEST); <br /> HttpServletResponse response = (HttpServletResponse)ctx.get(ServletActionContext.HTTP_RESPONSE); <br /> response.reset(); <br /> response.setCharacterEncoding("utf-8"); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //PrintWriter pw = response.getWriter(); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; List appusers = null; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; appusers = mgr.getAppusers(); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JSONArray array = new JSONArray(); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JSONObject json = new JSONObject(); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(appusers != null &amp;&amp; appusers.size() &gt; 0){ <br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int i=0;i&lt;appusers.size();i++){ <br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JSONObject row = new JSONObject(); <br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Appuser user_temp = (Appuser)appusers.get(i); <br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; row.put("userId",user_temp.getUserId()); <br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; row.put("userName", user_temp.getUserName()); <br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; row.put("password",user_temp.getPassword()); <br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; row.put("email", user_temp.getEmail()); <br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; array.add(row); <br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; json.put("successproperty", true); <br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; json.put("totalProperty", appusers.size()); <br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; json.put("root", array); <br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.jsonString = json.toString(); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return "sucess"; <br /> } <br /> <br />} <br /> <br /><br /><strong>问题补充:</strong><br />{"successproperty":true,"totalProperty":1,"root":[{"userId":1,"userName":"sa","password":"1","email":"1@1.1"}]} <br />这个是System.out.println(jsonString);打出来的 <br /> <br />我把response.getWriter().println(jsonString);加上了也是没数据,才开始研究ext没多久,谢谢回贴!<br /><strong>问题补充:</strong><br />fields: [ <br />&nbsp;&nbsp;&nbsp; {'userId'},{'userName'},{'password'},{'email'} <br />&nbsp;&nbsp; ] 这样子加上报错- -++<br /><strong>问题补充:</strong><br />各位看看啦!!~~<br /><strong>问题补充:</strong><br />我在js里面加这么一句: <br />ds.on('loadexception',function(t,o,a,e){alert('ex = '+e+',this = '+t+',o = '+o+',a = '+a);}); <br />其中e打出来是[Object Error] <br />不知道是什么原因?<br /><strong>问题补充:</strong><br />目前页面上可以打出json的字符串{"root":[{"userId":1,"userName":"sa","password":"1","email":"1@1.1"}],"totalProperty":1,"successproperty":true} <br />但跳不到jsp里面了。。<br /><strong>问题补充:</strong><br />我的意思是,现在页面只打出个json字符串,不显示表格什么其他的元素了<br /><strong>问题补充:</strong><br />我的就是先访问List.action然后打算进入List.jsp显示action取出的数据呀 <br />但打出的就是一堆数据串,页面出不来<br /><strong>问题补充:</strong><br />试了把successproperty去掉,把JsonStore换成Ext.data.Store还是只打出字串。。<br /><strong>问题补充:</strong><br />好像和region:"center"也没什么关系,现在的唯一问题是不出页面- -|| <br />谢谢两位回贴!<br /><strong>问题补充:</strong><br />我如果先要访问一个action去取数据,然后在跳到一个jsp页面显示数据,这么写对么?<br /><strong>问题补充:</strong><br />请把你第一个item内容取得,再把grid的region设置为center,你的页面就可以出现。 <br /> <br />--------这句话没懂- -|| <br /><br /><strong>问题补充:</strong><br />是直接写 <br />var viewport = new Ext.Viewport({ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; grid <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ]} <br />&nbsp;&nbsp;&nbsp; ); 吗?<br /><strong>问题补充:</strong><br />目前我的访问流程是:login.html-&gt;submit-&gt;LoginAction-&gt;success后返回login.html-&gt;再进入ListAction-&gt;list.jsp <br />这个要是用extjs看的话是不是有问题?<br /><strong>问题补充:</strong><br />grid中region设置为center也是不显示页面,只有数据- - <br /> <br />{"root":[{"userId":1,"userName":"sa","password":"1","email":"1@1.1"},{"userId":2,"userName":"1","password":"1","email":"1"},{"userId":3,"userName":"2","password":"2","email":"2"},{"userId":4,"userName":"3","password":"3","email":"3"},{"userId":5,"userName":"4","password":"4","email":"4"},{"userId":6,"userName":"5","password":"5","email":"5"},{"userId":7,"userName":"6","password":"6","email":"6"},{"userId":8,"userName":"7","password":"7","email":"7"},{"userId":9,"userName":"8","password":"8","email":"8"},{"userId":10,"userName":"9","password":"9","email":"9"}],"totalProperty":10} <br /> <br /> <br />我去吃点东西,一会回来,非常感谢!<br /><strong>问题补充:</strong><br />tb那段是需要在jsp里面加上 <br />&lt;div id="north-div"&gt;&lt;/div&gt; <br />这一行~ <br /> <br />现在问题就是如果我先访问list.action,然后return null; <br />就直接打出字符串,没进jsp- -<br /><strong>问题补充:</strong><br />晕,有点乱了。。。我才接触extjs没多久 <br /> <br />我的意思是,我要在数据库里取一个list,显示在jsp上,如果是struts或者是struts2的话就是先访问ListAction取数据,然后mapping转向到jsp,页面就出来了。 <br />但Extjs也是如此吗?我有点晕了。。<br /><strong>问题补充:</strong><br />我把js改了一个简单的 <br />Ext.onReady(function(){ <br />&nbsp;&nbsp;&nbsp; Ext.BLANK_IMAGE_URL = 'extjs/resources/images/default/s.gif'; <br />&nbsp;&nbsp;&nbsp; Ext.QuickTips.init(); <br />&nbsp;&nbsp;&nbsp; var sm = new Ext.grid.CheckboxSelectionModel(); <br />&nbsp;&nbsp;&nbsp; var cm = new Ext.grid.ColumnModel([ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new Ext.grid.RowNumberer(), <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sm, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {header:'编号',dataIndex:'userId',sortable:true}, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {header:'用户名',dataIndex:'userName'}, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {header:'密码',dataIndex:'password'}, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {header:'电子邮件',dataIndex:'email'} <br />&nbsp;&nbsp;&nbsp; ]); <br />&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; var ds = new Ext.data.Store({ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; proxy: new Ext.data.HttpProxy({url:'List.action'}), <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reader: new Ext.data.JsonReader({ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; root: 'root', <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; totalProperty: 'totalProperty' <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }, [ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {name: 'userId',mapping:'userId',type:'int'}, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {name: 'userName',mapping:'userName',type:'string'}, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {name: 'password',mapping:'password',type:'string'}, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {name: 'email',mapping:'email',type:'string'} <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ]) <br />&nbsp;&nbsp;&nbsp; }); <br /> <br />&nbsp;&nbsp;&nbsp; var grid = new Ext.grid.GridPanel({ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; el: 'center', <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ds: ds, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sm: sm, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cm: cm, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; width:700, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; height:280, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bbar: new Ext.PagingToolbar({ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pageSize: 10, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; store: ds, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; displayInfo: true, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; displayMsg: '显示第 {0} 条到 {1} 条记录,一共 {2} 条', <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; emptyMsg: "没有记录" <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }) <br />&nbsp;&nbsp;&nbsp; }); <br /> <br />&nbsp;&nbsp;&nbsp; grid.render(); <br />&nbsp;&nbsp;&nbsp; ds.load({params:{start:0, limit:10}}); <br />&nbsp;&nbsp;&nbsp; ds.load({callback:function(records,success,totalRecords){alert('records = '+records);}}); <br />}); <br /> <br /> <br /> <br />但是也不好用- -|不知道哪里有问题<br /><strong>问题补充:</strong><br />问题好像解决了,我把ListAction查询数据的代码一起写到了LoginAction里,然后如果登录成功的话就window.location = 'List.jsp';终于出数据了! <br />谢谢两位!!非常感谢!!!

Struts2的上传问题,图片怎么存在tomcat里而不是项目里呢?

jsp页面 <s:form action="myUpload" enctype="multipart/form-data" method="post"> <s:file label="选择上传文件" name="image"></s:file> <s:submit value="上传"></s:submit> </s:form> ------------------------- Struts.xml <struts> <package name="default" extends="struts-default"> <action name="myUpload" class="com.action.UploadAction"> <interceptor-ref name="fileUpload"> <param name="allowedTypes"> image/jpeg,image/x-png,image/gif,image/bmp </param> <param name="maximumSize"> 300000 </param> </interceptor-ref> <interceptor-ref name="defaultStack"></interceptor-ref> <param name="path">/upload</param><!-- 该path与UploadAction中的path属性一致,并建了一个upload文件夹 --> <result name="success">/uploadSuccess.jsp</result> <result name="input">/upload.jsp</result> </action> </package> </struts> --------------------------- UploadAction.java public class UploadAction extends ActionSupport { private static final long serialVersionUID = 1222222222222L; private File image; private String imageContentType; private String imageFileName; private String path;//接受依赖注入的方法,该path在Struts.xml中配置 public void setPath(String value){ this.path = value; } public String getPath(){//返回文件上传后保存的位置 return ServletActionContext.getServletContext().getRealPath(path); } public File getImage() { return image; } public void setImage(File image) { this.image = image; } public String getImageContentType() { return imageContentType; } public void setImageContentType(String imageContentType) { this.imageContentType = imageContentType; } public String getImageFileName() { return imageFileName; } public void setImageFileName(String imageFileName) { this.imageFileName = imageFileName; } //生成一个新的文件名,以免上传相同文件名的文件 @SuppressWarnings("unused") private String getFileName(String fileName){ int position = fileName.lastIndexOf("."); String newname = fileName.substring(position); return System.currentTimeMillis() + newname; } public String execute() throws Exception{ imageFileName = getFileName(imageFileName); FileInputStream fis = new FileInputStream(image); FileOutputStream fos = new FileOutputStream(getPath() + "\\" + imageFileName); byte [] b = new byte[4096]; int length = 0; while((length = fis.read(b)) > 0){ fos.write(b, 0, length); } fis.close(); fos.close(); return SUCCESS; } } ------------------------- WebRoot下我建立了个upload文件夹 ------------------------ 上传成功后的现实页面,<img src="upload/<s:property value="imageFileName"/>"/> <br/> <s:property value="imageFileName"/>也成功的现实出来了图片和文件名 但是为什么upload文件夹没有该文件呢? 该文件是传到了tomcat的upload文件夹下面去了,我想要的结果是上传到项目的我建立的upload文件夹下,怎么办呀

EXT4.2 Ext.Ajax.request问题

Ext.Ajax.request({ url: homePageConfig.url.login, params : { username : name , userpass : pass }, method : 'POST', success : function(response, options) { Ext.Msg.show("成功"); } , failure : function() { Ext.Msg.show("失败"); } }); 问题 1:method一但改为POST那么参数就传递不到struts2的ACTION中了,有人能给具体解答下吗? 2:无法得到ACTION的返回值response.getWriter().write(result);

ext+struts2.0 同一个action 多个方法 异步问题

一个页面由多个组件组成,每个组件都重后台取数据,使用Ext.Ajax.request()方式 <br /> <br /><pre name="code" class="java">Ext.Ajax.request( { url : 'rightAction!methodXX1.action', } ) Ext.Ajax.request( { url : 'rightAction!methodXX2.action', } ) Ext.Ajax.request( { url : 'rightAction!methodXX3.action', } )</pre> <br /> <br />经常1的数据显示在2上,或2的数据显示在3上。 <br /> <br />后来把Ext.Ajax.request改为同步方式解决。但同步执行会影响效率,失去ajax的优点。郁闷中……<br /><strong>问题补充:</strong><br />谢谢boreas_baosj <br />其实我已经使用同步方法解决了。其实我最主要的是和FusionCharts结合使用。 <br />本来 有setDataURL(XX.action),不能使用,只能使用。 <br />就是感觉有点别扭。 <br /><pre name="code" class="java"> Wsd.web.chart = function() { var w = 100; var h = 230; var obj = document.getElementById('web-area-container'); w = obj.offsetWidth; w = w / 3; // 区域 this.showChart(w, h, 'wtoEMsColAction!GZtoGD.action', 'GZtoGD', 'MSColumn3D.swf'); this.showChart(w, h, 'wtoEMsColAction!YNtoGD.action', 'YNtoGD', 'MSColumn3D.swf'); this.showChart(w, h, 'wtoEMsColAction!GXtoGD.action', 'GXtoGD', 'MSColumn3D.swf'); // 地域 var obj = document.getElementById('web-factory-container'); w = obj.offsetWidth; w = w / 3; this.showChart(w, h, 'wtoEMsColAction!tianYi.action', 'tianYi', 'MSColumn3D.swf'); this.showChart(w, h, 'wtoEMsColAction!tianEr.action', 'tianEr', 'MSColumn3D.swf'); this.showChart(w, h, 'wtoEMsColAction!longTan.action', 'longTan', 'MSColumn3D.swf'); } Wsd.web.chart.prototype = { showChart : function(w, h, url, chartId, swf) { var xmlStr = Wsd.golob.Synchronize(url); var chart = new FusionCharts('../scripts/fusionCharts/swf/' + swf, chartId + '_flash', w, h, '0', '0'); chart.setDataXML(xmlStr); chart.setTransparent(true); chart.render(chartId); } } //自己定义一个同步的方法。作为全局的方法使用 Wsd.golob.Synchronize = function(url) { function createXhrObject() { var http; var activeX = ['MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP']; try { http = new XMLHttpRequest(); } catch (e) { for (var i = 0; i &lt; activeX.length; ++i) { try { http = new ActiveXObject(activeX[i]); break; } catch (e) { } } } finally { return http; } }; var conn = createXhrObject(); conn.open("GET", url, false); conn.send(null); if (conn.responseText != '') { var returnVal=conn.responseText; if (returnVal.indexOf("Session Expired") != -1) {//判断session超时 new Wsd.golob.Redirect(); } else { return returnVal; } } else { return null; } }; </pre> <br />

struts2 Action返回的json对象无法绑定到Ext grid中

大家好: 后台返回的json对象格式上好像出了点问题,参考成功的例子,json对象应该是以下格式: { total: 2, root : [ { id: 1, firstname: 'Bill', occupation: 'Gardener' }, // a row object { id: 2, firstname: 'Ben' , occupation: 'Horticulturalist' } // another row object ] } 可是我现在的json对象只有root 里面这部分,如下: { { id: 1, firstname: 'Bill', occupation: 'Gardener' }, // a row object { id: 2, firstname: 'Ben' , occupation: 'Horticulturalist' } // another row object } 我从Ext的js文件,struts2的xml文件,后台action,都看了一遍也不知道是什么造成的? Ext相关部分: [code="javaScript"] ds: new Ext.data.Store({ url : 'getCustomersList.action', reader : new Ext.data.JsonReader({totalProperty : "total", root : "root"}, [{name : "customerCode", type : "string"}, {name : "customerName", type : "string"}, {name : "conDist", type : "boolean"}, {name : "supDist", type : "boolean"}, {name : "delDist", type : "boolean"}, {name : "consigneeDist", type : "boolean"}, {name : "dcCompDist", type : "boolean"}, {name : "shippingCompDist", type : "boolean"}, {name : "customerRank", type : "string"}, {name : "creditRank", type : "string"}, {name : "availDist", type : "boolean"}]) }) [/code] struts2 xml相关部分 [code="xml"] <package name="mm" extends="json-default" namespace="/action/mm"> <action name="getCustomersList" class="wms.action.mm.CustomerManagementAction" method="getCustomersList"> <result type="json"> <param name="root">customersInfoList</param> <param name="excludeNullProperties">true</param> </result> </action> </package> [/code] 我的lib是:struts2-json-plugin-2.1.8.1.jar和json-lib-2.1.jar

Struts2拦截器问题

我现在的项目中没有在struts.xml中配置任何的拦截器,是否会自动隐藏一个默认的拦截器呢?现在项目前台是用的Ext,设计到上传图片,加了属性fileUpload:true,每个属性的name都是bena.XXX,可是每次到后台都报bean为空,出现空指针异常。是不是因为我没有在struts.xml中配置拦截器呢?可是第一次会出现空指针,刷新后,重新再保存就没有空指针了。很是奇怪,希望能有人帮忙解答一下。

Ext与Struts整合,Ext的验证码生成Web.xml配置,一处,出错

<span style="color: yellow">&nbsp;&nbsp;&nbsp; &lt;filter&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter-name&gt;struts2&lt;/filter-name&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter-class&gt;org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter&lt;/filter-class&gt; <br />&nbsp;&nbsp;&nbsp; &lt;/filter&gt; <br />&nbsp;&nbsp;&nbsp; &lt;filter-mapping&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter-name&gt;struts2&lt;/filter-name&gt; <br /> &lt;url-pattern&gt;/*&lt;/url-pattern&gt; <br /> &lt;/filter-mapping&gt; </span> <br /> <br /> &lt;servlet&gt; <br /> &lt;servlet-name&gt;validationcodeServlet&lt;/servlet-name&gt; <br /> &lt;servlet-class&gt; <br /> com.morik.util.ValidationCodeServlet&lt;/servlet-class&gt; <br /> &lt;/servlet&gt; <br /> &lt;servlet-mapping&gt; <br /> &lt;servlet-name&gt;validationcodeServlet&lt;/servlet-name&gt; <br /> &lt;url-pattern&gt;/IMG.action&lt;/url-pattern&gt; <br /> &lt;/servlet-mapping&gt; <br /> <br /> <br />两种不同颜色的出错了,是不是冲突了,&lt;filter-name&gt;与&lt;servlet-name&gt;不会是一个意思,要写到一起吧,前辈们指点一下

struts的配置问题

<package name="levelAction" namespace="/sys" extends="struts-default"> <action name="*LevelAction" method="{1}" class="cn.com.myweb.extaction.LevelAction"> <result name="saveLevel">/page/ext/extjsp.jsp</result> <result>/page/ext/json_struts2.jsp</result> </action> </package> 为什么我看到有action里 class="levelAction"> 直接写类名? 而且这个类明首字还小写了? 我照着配为什么访问路径的时候报Unable to instantiate 我看到这个项目里全都是这么配的。

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

程序员请照顾好自己,周末病魔差点一套带走我。

程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。

和黑客斗争的 6 天!

互联网公司工作,很难避免不和黑客们打交道,我呆过的两家互联网公司,几乎每月每天每分钟都有黑客在公司网站上扫描。有的是寻找 Sql 注入的缺口,有的是寻找线上服务器可能存在的漏洞,大部分都...

点沙成金:英特尔芯片制造全过程揭密

“亚马逊丛林里的蝴蝶扇动几下翅膀就可能引起两周后美国德州的一次飓风……” 这句人人皆知的话最初用来描述非线性系统中微小参数的变化所引起的系统极大变化。 而在更长的时间尺度内,我们所生活的这个世界就是这样一个异常复杂的非线性系统…… 水泥、穹顶、透视——关于时间与技艺的蝴蝶效应 公元前3000年,古埃及人将尼罗河中挖出的泥浆与纳特龙盐湖中的矿物盐混合,再掺入煅烧石灰石制成的石灰,由此得来了人...

上班一个月,后悔当初着急入职的选择了

最近有个老铁,告诉我说,上班一个月,后悔当初着急入职现在公司了。他之前在美图做手机研发,今年美图那边今年也有一波组织优化调整,他是其中一个,在协商离职后,当时捉急找工作上班,因为有房贷供着,不能没有收入来源。所以匆忙选了一家公司,实际上是一个大型外包公司,主要派遣给其他手机厂商做外包项目。**当时承诺待遇还不错,所以就立马入职去上班了。但是后面入职后,发现薪酬待遇这块并不是HR所说那样,那个HR自...

女程序员,为什么比男程序员少???

昨天看到一档综艺节目,讨论了两个话题:(1)中国学生的数学成绩,平均下来看,会比国外好?为什么?(2)男生的数学成绩,平均下来看,会比女生好?为什么?同时,我又联想到了一个技术圈经常讨...

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

外包程序员的幸福生活

今天给你们讲述一个外包程序员的幸福生活。男主是Z哥,不是在外包公司上班的那种,是一名自由职业者,接外包项目自己干。接下来讲的都是真人真事。 先给大家介绍一下男主,Z哥,老程序员,是我十多年前的老同事,技术大牛,当过CTO,也创过业。因为我俩都爱好喝酒、踢球,再加上住的距离不算远,所以一直也断断续续的联系着,我对Z哥的状况也有大概了解。 Z哥几年前创业失败,后来他开始干起了外包,利用自己的技术能...

C++11:一些微小的变化(新的数据类型、template表达式内的空格、nullptr、std::nullptr_t)

本文介绍一些C++的两个新特性,它们虽然微小,但对你的编程十分重要 一、Template表达式内的空格 C++11标准之前建议在“在两个template表达式的闭符之间放一个空格”的要求已经过时了 例如: vector&lt;list&lt;int&gt; &gt;; //C++11之前 vector&lt;list&lt;int&gt;&gt;; //C++11 二、nullptr ...

优雅的替换if-else语句

场景 日常开发,if-else语句写的不少吧??当逻辑分支非常多的时候,if-else套了一层又一层,虽然业务功能倒是实现了,但是看起来是真的很不优雅,尤其是对于我这种有强迫症的程序"猿",看到这么多if-else,脑袋瓜子就嗡嗡的,总想着解锁新姿势:干掉过多的if-else!!!本文将介绍三板斧手段: 优先判断条件,条件不满足的,逻辑及时中断返回; 采用策略模式+工厂模式; 结合注解,锦...

深入剖析Springboot启动原理的底层源码,再也不怕面试官问了!

大家现在应该都对Springboot很熟悉,但是你对他的启动原理了解吗?

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

为什么你不想学习?只想玩?人是如何一步一步废掉的

不知道是不是只有我这样子,还是你们也有过类似的经历。 上学的时候总有很多光辉历史,学年名列前茅,或者单科目大佬,但是虽然慢慢地长大了,你开始懈怠了,开始废掉了。。。 什么?你说不知道具体的情况是怎么样的? 我来告诉你: 你常常潜意识里或者心理觉得,自己真正的生活或者奋斗还没有开始。总是幻想着自己还拥有大把时间,还有无限的可能,自己还能逆风翻盘,只不是自己还没开始罢了,自己以后肯定会变得特别厉害...

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

当HR压你价,说你只值7K,你该怎么回答?

当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫。 礼貌地说:“7K是吗?了解了。嗯~其实我对贵司的面试官印象很好。只不过,现在我的手头上已经有一份11K的offer。来面试,主要也是自己对贵司挺有兴趣的,所以过来看看……”(未完) 这段话主要是陪HR互诈的同时,从公司兴趣,公司职员印象上,都给予对方正面的肯定,既能提升HR的好感度,又能让谈判气氛融洽,为后面的发挥留足空间。...

面试:第十六章:Java中级开发(16k)

HashMap底层实现原理,红黑树,B+树,B树的结构原理 Spring的AOP和IOC是什么?它们常见的使用场景有哪些?Spring事务,事务的属性,传播行为,数据库隔离级别 Spring和SpringMVC,MyBatis以及SpringBoot的注解分别有哪些?SpringMVC的工作原理,SpringBoot框架的优点,MyBatis框架的优点 SpringCould组件有哪些,他们...

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

【阿里P6面经】二本,curd两年,疯狂复习,拿下阿里offer

二本的读者,在老东家不断学习,最后逆袭

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

《经典算法案例》01-08:如何使用质数设计扫雷(Minesweeper)游戏

我们都玩过Windows操作系统中的经典游戏扫雷(Minesweeper),如果把质数当作一颗雷,那么,表格中红色的数字哪些是雷(质数)?您能找出多少个呢?文中用列表的方式罗列了10000以内的自然数、质数(素数),6的倍数等,方便大家观察质数的分布规律及特性,以便对算法求解有指导意义。另外,判断质数是初学算法,理解算法重要性的一个非常好的案例。

《Oracle Java SE编程自学与面试指南》最佳学习路线图(2020最新版)

正确选择比瞎努力更重要!

面试官:你连SSO都不懂,就别来面试了

大厂竟然要考我SSO,卧槽。

微软为一人收购一公司?破解索尼程序、写黑客小说,看他彪悍的程序人生!...

作者 | 伍杏玲出品 | CSDN(ID:CSDNnews)格子衬衫、常掉发、双肩包、修电脑、加班多……这些似乎成了大众给程序员的固定标签。近几年流行的“跨界风”开始刷新人们对程序员的...

终于,月薪过5万了!

来看几个问题想不想月薪超过5万?想不想进入公司架构组?想不想成为项目组的负责人?想不想成为spring的高手,超越99%的对手?那么本文内容是你必须要掌握的。本文主要详解bean的生命...

我说我懂多线程,面试官立马给我发了offer

不小心拿了几个offer,有点烦

自从喜欢上了B站这12个UP主,我越来越觉得自己是个废柴了!

不怕告诉你,我自从喜欢上了这12个UP主,哔哩哔哩成为了我手机上最耗电的软件,几乎每天都会看,可是吧,看的越多,我就越觉得自己是个废柴,唉,老天不公啊,不信你看看…… 间接性踌躇满志,持续性混吃等死,都是因为你们……但是,自己的学习力在慢慢变强,这是不容忽视的,推荐给你们! 都说B站是个宝,可是有人不会挖啊,没事,今天咱挖好的送你一箩筐,首先啊,我在B站上最喜欢看这个家伙的视频了,为啥 ,咱撇...

立即提问
相关内容推荐