问题描述
当我点击调用以后,页面会刷新,系统和系统接口的下拉框会变成默认值,我不想让他变成默认的,还是保持我所选择的,应该怎么写,求详细点的代码,而且还不能用Ajax,框架用的是Struts2,求大神解答。
解决方案
解决方案二:
那么调用的时候把画面的值保存记住。刷新的完再重新绑定上去。
解决方案三:
能给一下详细的代码么,没写过这样的需求,谢谢了
解决方案四:
1、最好还是用ajax提交(当然你说不能用,就pass了)2、可以这样如果用的是select你提交到后台的时候,系统和系统参数选择的值,你在后台肯定能取到(后台action有对应的name)那么你在后台action里处理完相关的业务以后(比如查询或者保存数据库),返回前台的时候(不是redirect)那么这个两个值,还是会带到前台的这个时候你等页面初始化完,就可以把接口和接口参数设置为你刚才提交时候的值了window.onload=function(){//设置接口和接口参数选中值}3、如果用s:select应该能直接映射上的
解决方案五:
引用3楼shixitong的回复:
1、最好还是用ajax提交(当然你说不能用,就pass了)2、可以这样如果用的是select你提交到后台的时候,系统和系统参数选择的值,你在后台肯定能取到(后台action有对应的name)那么你在后台action里处理完相关的业务以后(比如查询或者保存数据库),返回前台的时候(不是redirect)那么这个两个值,还是会带到前台的这个时候你等页面初始化完,就可以把接口和接口参数设置为你刚才提交时候的值了window.onload=function(){//设置接口和接口参数选中值}3、如果用s:select应该能直接映射上的
还是不太明白,能加一下QQ然后具体跟我说一下么?谢谢了
解决方案六:
完全客户端操作可以用html5里面的localStorage,把下拉菜单选中值保存在本地浏览器端
解决方案七:
引用
还是不太明白,能加一下QQ然后具体跟我说一下么?谢谢了
说个最直接的前台<s:selectname="jk"list="#{'1':'接口1','2':'接口2'}"></s:select><s:selectname="jkcs"list="#{'1':'接口参数1','2':'接口参数2'}"></s:select>
后台action增加增加privateStringjk;privateStringjkcs;publicStringgetJk(){returnjk;}publicvoidsetJk(Stringjk){this.jk=jk;}publicStringgetJkcs(){returnjkcs;}publicvoidsetJkcs(Stringjkcs){this.jkcs=jkcs;}
解决方案八:
引用6楼shixitong的回复:
引用
还是不太明白,能加一下QQ然后具体跟我说一下么?谢谢了说个最直接的前台<s:selectname="jk"list="#{'1':'接口1','2':'接口2'}"></s:select><s:selectname="jkcs"list="#{'1':'接口参数1','2':'接口参数2'}"></s:select>
后台action增加增加privateStringjk;privateStringjkcs;publicStringgetJk(){returnjk;}publicvoidsetJk(Stringjk){this.jk=jk;}publicStringgetJkcs(){returnjkcs;}publicvoidsetJkcs(Stringjkcs){this.jkcs=jkcs;}
我用s标签就报错,有没有什么办法能在页面刷新后直接赋值,我传到后台以后也就是判断传过来的是什么数值,执行什么方法,后台没对这两个数值做操作,我想有没有刷新完页面前台获取一下然后直接在赋值上去的,谢谢了
解决方案九:
建议你还是用上面这个方法,你s标签报错,标签引入了吗?<%@taglibprefix="s"uri="/struts-tags"%>
你非要这种(不建议)<scripttype="text/javascript">//页面元素加载完调用的方法window.onload=function(){//这里的1和2就是你从后台传过来的值document.getElementById("jk").value="1";document.getElementById("jkcs").value="2";}</script><selectid="jk"name="jk"><optionvalue="1">接口1</option><optionvalue="2">接口2</option></select><selectid="jkcs"name="jkcs"><optionvalue="1">接口1</option><optionvalue="2">接口2</option></select>
后台方法不变还是前面那个
解决方案十:
引用8楼shixitong的回复:
建议你还是用上面这个方法,你s标签报错,标签引入了吗?<%@taglibprefix="s"uri="/struts-tags"%>你非要这种(不建议)<scripttype="text/javascript">//页面元素加载完调用的方法window.onload=function(){//这里的1和2就是你从后台传过来的值document.getElementById("jk").value="1";document.getElementById("jkcs").value="2";}</script><selectid="jk"name="jk"><optionvalue="1">接口1</option><optionvalue="2">接口2</option></select><selectid="jkcs"name="jkcs"><optionvalue="1">接口1</option><optionvalue="2">接口2</option></select>
后台方法不变还是前面那个
肯定导s标签了,但是用了就报错,用onload方法的话,如果我指定值了,我刚进入那个页面,显示的也不是默认的值了,也是我指定的值而且document.getElementById("secretkey").value=${secretkey};document.getElementById("systemport").value=${systemport};也获取不到值,麻烦大神在帮帮我,谢谢了
解决方案十一:
引用9楼liyaxiong517的回复:
Quote: 引用8楼shixitong的回复:
建议你还是用上面这个方法,你s标签报错,标签引入了吗?<%@taglibprefix="s"uri="/struts-tags"%>你非要这种(不建议)<scripttype="text/javascript">//页面元素加载完调用的方法window.onload=function(){//这里的1和2就是你从后台传过来的值document.getElementById("jk").value="1";document.getElementById("jkcs").value="2";}</script><selectid="jk"name="jk"><optionvalue="1">接口1</option><optionvalue="2">接口2</option></select><selectid="jkcs"name="jkcs"><optionvalue="1">接口1</option><optionvalue="2">接口2</option></select>
后台方法不变还是前面那个
肯定导s标签了,但是用了就报错,用onload方法的话,如果我指定值了,我刚进入那个页面,显示的也不是默认的值了,也是我指定的值而且document.getElementById("secretkey").value=${secretkey};document.getElementById("systemport").value=${systemport};也获取不到值,麻烦大神在帮帮我,谢谢了
你进入这个页面肯定要判断下的,比如这个secretkey有没有值啊,然后再赋值
解决方案十二:
还有你后台action怎么写的?把代码贴出来
解决方案十三:
我后台action只是判断了一下secretkey和systemport,看前台页面传进来的是多少,然后根据传进来的数字不同,做不同的操作,根本不需要操作我传进来的两个值,我就想让前台的下拉框能在刷新以后还显示我所选中的值,不知道应该怎么做,我后台就把secretkey和systemport私有了一下,提供了get/set方法,前台直接${secretkey}${systemport}就可以取到下拉框所对应的value
解决方案十四:
1、那你后台还看到前台传过来的secretkey和systemport值啊?前台<s:propertyvalue="secretkey"/>还有值?如果使用任何struts标签都报错的话,说明配置或者页面那边肯定写的有问题2、你那个查询页面第一次加载的时候要判断下${secretkey}和${systemport}有没有值如果没有值就不设置接口和接口参数这两个select框的值如果有值就设置接口和接口参数的值(这个如果有值就说明不是第一次加载了)不知道你还有哪边不明白,比如你说你前台使用struts标签报错,你把报错信息贴出来啊,这样别人怎么帮你看整个流程就是这样
解决方案十五:
我不知道在前台应该怎么判断,判断完了以后怎么让下拉框的值等于后台的值,这块的代码不会写,能帮我贴一段代码么?谢谢了
解决方案:这很难吗?调用的时候把这两个下拉框的值存一下,在页面加载完之后把值赋给下拉框就行了呗。可能是我理解错了?
解决方案:比如判断secretkeyvarsecretkey=${secretkey};if(secretkey!=""&&null!=secretkey){document.getElementById("secretkey").value=secretkey;}
解决方案:提交的时候把值从页面带到后台,再从后台带到页面,下拉框的选中通过jstl标签来判断该选中哪个,LZ你说呢?
解决方案:引用16楼shixitong的回复:
比如判断secretkeyvarsecretkey=${secretkey};if(secretkey!=""&&null!=secretkey){document.getElementById("secretkey").value=secretkey;}
<scripttype="text/javascript">functionimitateTransfer(){varsecretkey=document.getElementById("secretkey").value;varsystemport=document.getElementById("systemport").value;if(secretkey!=-1&&systemport!=-1){varfrm1=document.getElementById("search");frm1.submit();}else{alert("请选择系统,系统接口!");return;}}window.onload=function(){varsecretkey=${secretkey};varsystemport=${systemport};if(secretkey!=""&&secretkey!=null){document.getElementById("secretkey").value=secretkey;}if(systemport!=""&&systemport!=null){document.getElementById("systemport").value=systemport;}}</script>
是这么写么?但是我写上去以后重启项目,打开页面,再点调用就没反应了--.
解决方案:是的,你点击调用没反应,还有报错信息啊!兄弟啊,要学会自己调试,不要只说个结果,增加别人判断的难度如果你不会用debug,你起码在一些地方输出一些信息去判断啊比如你重启后项目后window.onload=function(){alert("已经进去页面加载完成方法");varsecretkey=${secretkey};alert("取到的接口value="+secretkey);varsystemport=${systemport};alert("取到的接口参数value="+systemport);if(secretkey!=""&&secretkey!=null){document.getElementById("secretkey").value=secretkey;}if(systemport!=""&&systemport!=null){document.getElementById("systemport").value=systemport;}}
这个时候如果只弹出"已经进去页面加载完成方法"这个对话框,那说明后面的一句就有问题其它依次类推
解决方案:将选中的值经过后台传到页面,然后加载就ok
解决方案:el表达式
解决方案:先把值保存下来,然后刷新完后在把值放回去。
解决方案:引用19楼shixitong的回复:
是的,你点击调用没反应,还有报错信息啊!兄弟啊,要学会自己调试,不要只说个结果,增加别人判断的难度如果你不会用debug,你起码在一些地方输出一些信息去判断啊比如你重启后项目后window.onload=function(){alert("已经进去页面加载完成方法");varsecretkey=${secretkey};alert("取到的接口value="+secretkey);varsystemport=${systemport};alert("取到的接口参数value="+systemport);if(secretkey!=""&&secretkey!=null){document.getElementById("secretkey").value=secretkey;}if(systemport!=""&&systemport!=null){document.getElementById("systemport").value=systemport;}}这个时候如果只弹出"已经进去页面加载完成方法"这个对话框,那说明后面的一句就有问题其它依次类推
忘了说了,我写了window.onload=function(){}以后页面就全部失效了,点调用什么的都不好使,我在body上加了一个onload=“load()”在javascript里边写了functionload(){alert("开始了");varsecretkey=${secretkey};varsystemport=${systemport};if(secretkey!=""&&secretkey!=null){document.getElementById("secretkey").value=secretkey;}if(systemport!=""&&systemport!=null){document.getElementById("systemport").value=systemport;}}也是不好使,我自己手敲,根本没有window.onload方法,只有opener,outerHeight,outerWidth,open这几个方法,是不是少导东西了,麻烦大神在给我看看吧,谢谢了
解决方案:是不是用了啥前台框架?你要是早贴代码多好
解决方案:<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><%@pagepageEncoding="gbk"contentType="text/html;charset=gbk"%><%@tagliburi="http://www.lianchuang.com/lcwdf"prefix="lc"%><%@tagliburi="/struts-tags"prefix="s"%><htmlxmlns="http://www.w3.org/1999/xhtml"><head><%@includefile="/systemportal/include.jsp"%></head><bodyclass="mainbg-img"><!--查询区--><divclass="top-search"><h4class="caption-a"><span>系统接口模拟调用</span><inputname=""type="button"class="btn-open"id="advopenbtn"onclick="advopen('search-contain')"/></h4><divid="search-contain"><divid="search-sp"class="search-mod"><formaction="/uam/access/abusinessplatform/manage_imitateTransfer.action"method="post"id="search"><tablecellspacing="0"class="table-b"><trstyle="display:block;"><tdclass="intxt-td">系统:</td><td><selectname="secretkey"id="secretkey"style="width:155px"><optionvalue="-1">------请选择------</option><optionvalue="0">移动商城销售子系统</option><optionvalue="1">统一门户认证中心</option><optionvalue="2">中国移动APP</option><optionvalue="3">移动商城服务子系统</option><optionvalue="4">中国移动WAP营业厅</option><optionvalue="5">融合通信</option><optionvalue="6">灰度销售子系统</option><optionvalue="7">10085</option></select></td><tdclass="intxt-td">系统接口:</td><td><selectname="systemport"id="systemport"style="width:155px"><optionvalue="-1">------请选择------</option><optionvalue="0">用户登录</option><optionvalue="1">用户Assertion查询</option><optionvalue="2">用户会话报活</option><optionvalue="3">用户会话登出</option><optionvalue="4">用户临时身份凭证获取</option><optionvalue="5">用户临时身份凭证获取</option><optionvalue="6">用户身份凭证获取</option><optionvalue="7">短信随机码发送</option><optionvalue="8">账号绑定关系查询</option></select></td></tr></table></form></div><divclass="toolbar"style="margin:0px;padding-right:10px;"><inputname="transfer"type="button"class="btn-search2"value="调用"id="dosearch"onclick="imitateTransfer()"/><spanclass="toolbar-end"></span></div></div></div><divclass="top-search"><h4class="caption-a"><span>返回结果:</span><inputname=""type="button"class="btn-open"id="advopenbtn"onclick="advopen('search-contain1')"/></h4><divid="search-contain1"><divid="search-sp"class="search-mod"><formid="search2"action="/uam/advice/adviceparam/manage_unlockAccount.action"method="post"><tablecellspacing="0"class="table-b"><trstyle="display:block;"><!--<tdclass="intxt-td">账号显示:<s:propertyvalue="lockedAccount"/></td>--><td><inputstyle="display:none"name="queryAccount"type="text"value="<s:propertyvalue="queryAccount"/>"class="int-a"/></td><td><s:iftest="queryAccount==null"><tr><tdcolspan="6"align="center"><fontcolor="blue">请输入查询条件!</font></td></tr></s:if><s:elseiftest="queryAccount==1"><tr><tdcolspan="6"align="center"><fontcolor="red">没有查询结果!</font></td></tr></s:elseif><!--显示用户查询信息--><s:elseiftest="queryAccount==2"><tr><tr><td><tablecolspan="6"width="350px">响应编码:</table></td><td><tablecolspan="6"width="350px">响应描述:</table></td></tr><tr><td><tablecolspan="6">${rspCode}</table></td><td><tablecolspan="6">${rspDesc}</table></td></tr></tr></s:elseif></td></tr></table></form></div><divclass="toolbar"style="margin:0px;padding-right:10px;"></div></div><scripttype="text/javascript">functionimitateTransfer(){varsecretkey=document.getElementById("secretkey").value;varsystemport=document.getElementById("systemport").value;if(secretkey!=-1&&systemport!=-1){varfrm1=document.getElementById("search");frm1.submit();}else{alert("请选择系统,系统接口!");return;}}window.onload=function(){alert("开始了");varsecretkey=${secretkey};varsystemport=${systemport};if(secretkey!=""&&secretkey!=null){document.getElementById("secretkey").value=secretkey;}if(systemport!=""&&systemport!=null){document.getElementById("systemport").value=systemport;}}</script></body></html>
这个就是我的前台页面,如果不写onload那个function的话页面可以用,要是写了,页面就全失效了
解决方案:publicclassImitateTransferActionextendsActionSupport{/**.**/privatestaticfinallongserialVersionUID=1L;//系统下拉框对应的value下标privateStringsecretkey;//系统接口下拉框对应的value下标privateStringsystemport;privateintqueryAccount;privatefinalstaticStringport=ConfigMgrFactory.getConfigMgr().getString("port");privatefinalstaticStringhostUrl=ConfigMgrFactory.getConfigMgr().getString("hostUrl");privatefinalstaticStringkeystore="/ydsc/ydsc.keystore";privatefinalstaticStringcer="/ydsc/12002.cer";//响应编码publicStringrspCode="";//响应描述publicStringrspDesc="";//请求报文publicStringloginXml="";//webservice的wsdlpublicStringservices="";//webservice的方法名publicStringmethod="";//下拉框valueprivatestaticStringa="0";publicStringimitateTransfer()throwsException{HttpServletRequestrequest=ServletActionContext.getRequest();request.setAttribute("secretkey",secretkey);request.setAttribute("systemport",systemport);System.out.println("secretkey:"+secretkey);System.out.println("systemport:"+systemport);if(secretkey.equals(a)){if(systemport.equals(a)){loginXml=ConfigMgrFactory.getConfigMgr().getString("loginXml");services=ConfigMgrFactory.getConfigMgr().getString("loginwsdl");method=ConfigMgrFactory.getConfigMgr().getString("loginmethod");doTransfer(loginXml,services,method);}elseif(systemport.equals("1")){loginXml=ConfigMgrFactory.getConfigMgr().getString("assertion");services=ConfigMgrFactory.getConfigMgr().getString("assertionwsdl");method=ConfigMgrFactory.getConfigMgr().getString("assertionmethod");doTransfer(loginXml,services,method);}elseif(systemport.equals("2")){loginXml=ConfigMgrFactory.getConfigMgr().getString("effective");services=ConfigMgrFactory.getConfigMgr().getString("effectivewsdl");method=ConfigMgrFactory.getConfigMgr().getString("effectivemethod");doTransfer(loginXml,services,method);}elseif(systemport.equals("3")){loginXml=ConfigMgrFactory.getConfigMgr().getString("logout");services=ConfigMgrFactory.getConfigMgr().getString("logoutwsdl");method=ConfigMgrFactory.getConfigMgr().getString("logoutmethod");doTransfer(loginXml,services,method);}elseif(systemport.equals("4")){loginXml=ConfigMgrFactory.getConfigMgr().getString("useridentity");services=ConfigMgrFactory.getConfigMgr().getString("useridentitywsdl");method=ConfigMgrFactory.getConfigMgr().getString("useridentitymethod");doTransfer(loginXml,services,method);}elseif(systemport.equals("5")){loginXml=ConfigMgrFactory.getConfigMgr().getString("appuseridentity");services=ConfigMgrFactory.getConfigMgr().getString("appuseridentitywsdl");method=ConfigMgrFactory.getConfigMgr().getString("appuseridentitymethod");doTransfer(loginXml,services,method);}elseif(systemport.equals("6")){loginXml=ConfigMgrFactory.getConfigMgr().getString("identityvoucher");services=ConfigMgrFactory.getConfigMgr().getString("identityvoucherwsdl");method=ConfigMgrFactory.getConfigMgr().getString("identityvouchermethod");doTransfer(loginXml,services,method);}elseif(systemport.equals("7")){loginXml=ConfigMgrFactory.getConfigMgr().getString("randomcode");services=ConfigMgrFactory.getConfigMgr().getString("randomcodewsdl");method=ConfigMgrFactory.getConfigMgr().getString("randomcodemethod");doTransfer(loginXml,services,method);}elseif(systemport.equals("8")){loginXml=ConfigMgrFactory.getConfigMgr().getString("queryaccount");services=ConfigMgrFactory.getConfigMgr().getString("queryaccountwsdl");method=ConfigMgrFactory.getConfigMgr().getString("queryaccountmethod");doTransfer(loginXml,services,method);}}else{System.out.println("失败");queryAccount=1;}return"transfer";}//公共方法publicStringdoTransfer(StringloginXml,Stringservices,Stringmethod)throwsException{try{DefaultCAPSignerdcs=newDefaultCAPSigner("123456","12002",keystore,//私钥文件位置cer);System.out.println(loginXml);System.out.println(services);StringencyptXml=dcs.signatureCAP(loginXml);System.out.println("encyptXml:"+encyptXml);StringloginRequestXml=Security.getEncryptString(encyptXml);System.out.println("loginRequestXml:"+loginRequestXml);StringloginUrl="http://hosturl:port/services/"+services+"?wsdl";loginUrl=loginUrl.replace("hosturl:port",hostUrl+":"+port);System.out.println(loginUrl);StringloginResponseXML=TemplateUtils.callService(loginUrl,method,"",loginRequestXml,3000);System.out.println("loginResponseXML:"+loginResponseXML);loginResponseXML=Security.getDecryptString(loginResponseXML);System.out.println("loginResponseXML:"+loginResponseXML);//dom4j解析Documentdoc=DocumentHelper.parseText(loginResponseXML);ElementrootElt=doc.getRootElement();//获取根节点Iteratoriter=rootElt.elementIterator("SessionHeader");//得到根节点下的子节点while(iter.hasNext()){ElementrecordEle=(Element)iter.next();Iteratoriters=recordEle.elementIterator("Response");while(iters.hasNext()){ElementitemEle=(Element)iters.next();//得到响应的编码,描述rspCode=itemEle.elementTextTrim("RspCode");rspDesc=itemEle.elementTextTrim("RspDesc");System.out.println(rspCode);System.out.println(rspDesc);}}}catch(EfaceExceptione){Stringa=e.getMessage();if(a.equals("接口调用超时")){System.out.println("主机系统"+hostUrl+",端口"+port+"的接口调用超时;");}else{System.out.println("主机系统"+hostUrl+",端口"+port+"的接口调用异常;");}}queryAccount=2;returnnull;}publicintgetQueryAccount(){returnqueryAccount;}publicvoidsetQueryAccount(intqueryAccount){this.queryAccount=queryAccount;}publicStringgetSystemport(){returnsystemport;}publicvoidsetSystemport(Stringsystemport){this.systemport=systemport;}publicStringgetSecretkey(){returnsecretkey;}publicvoidsetSecretkey(Stringsecretkey){this.secretkey=secretkey;}}
这个是我的后台action类,实在找不到问题所在了--
解决方案:早日解决。。
解决方案:能有什么问题
解决方案:soeasy嘛,只要你的值是提交到了后台的你无论是用ognl表达式还是EL表达式都是可以得到提交的值得我给你举一个EL表达式吧!在你的option元素上加上<c:iftest="${param.secretkey==1}">selected</c:if>
解决方案:lz不要用这种字典式的方法学东西。这样只能学到皮毛,容易停留在码农层次。多学理论,投入一点时间就好!
解决方案:struts2的ognl标签不是有回显机制吗?action实现ModelDriven<T>模型驱动
解决方案:select标签不是有一个selected属性么,在遍历生成这个select的option的时候,用ognl或者el表达式用一个三元表达式判断一下就行了
其他方案:
一般可以直接传到后台,再把数据传回页面,用js操作设为默认值。如果这个默认值你想在下次登陆是还能显示,那么就要放到数据库了,下次再拿出来显示。如果不需要下次登陆也回显,那么可以试下放到session,cookie,当然这种做法比较少,但是没什么不可以,你实现了,照样好用,用户用的爽那就是好,管理后台怎么怎么弄得,当然,后台代码还是要尽量写得好点.
解决方案:不想后台处理的话,可以用cookie试试,但是效果不一定理想参考http://blog.sina.com.cn/s/blog_7256fe8f01017q0j.html
解决方案:<%Stringm=String.valueOf(request.getAttribute("m"));%><selectname="year"><optionvalue="37"<%=if("37".equals(m)){%>selected="selected"<%=}%></option><optionvalue="38"<%=if("38".equals(m)){%>selected="selected"<%=}%></option><optionvalue="39"<%=if("39".equals(m)){%>selected="selected"<%=}%></option><optionvalue="40"<%=if("40".equals(m)){%>selected="selected"<%=}%></option><optionvalue="41"<%=if("41".equals(m)){%>selected="selected"<%=}%></option></select>这个最简单了。