当前位置: 代码迷 >> Web前端 >> 扫除wml表单文本框缓存 wml缓存清除
  详细解决方案

扫除wml表单文本框缓存 wml缓存清除

热度:29   发布时间:2012-10-19 16:53:35.0
清除wml表单文本框缓存 wml缓存清除

?

$rd_nocache = random(6);

' 新的页面地址,使页面缓存无效

<a href=\"index.php?action=pm&amp;do=send&amp;$rd_nocache\">$lang[pm_send]</a><br />\n"

' 新的表单名称,使表单缓存无效

echo "<p>$lang[pm_to]:<input type=\"text\" name=\"msgto$rd_nocache\" value=\"$pm[msgfrom]\" maxlength=\"20\" format=\"\" /><br />\n".
"<anchor title=\"$lang[submit]\">$lang[submit]".
"<go method=\"post\" href=\"index.php?action=pm&amp;do=send&amp;sid=$sid\">\n".
"<postfield name=\"msgto\" value=\"$(msgto$rd_nocache)\" />\n".
"</go></anchor>\n";

?

?

?

?

?

由于手机浏览器缓存的问题,我们会发现在WAP中修改记录点进去时候仍然是上一条记录信息,也就是缓存信息,比方说修改新闻,修改个人资料等。本人在网上找了很多资料,如有网友提出 加一个禁止缓存代码,如下

<meta http-equiv="Cache-Control" content="no-cache"/><!-- 禁止浏览器从缓存中访问页面内容 -->

<meta http-equiv="Expires"?? content="0"/>?

<meta http-equiv="Pragma"?? content="no-cache"/>?

但是在实际测试过程中,仍然没用。

经过一番思考,想到了一个解决方法,就是将每次修改记录的表单里面的文本框等名字变不同,即可。那样也无所谓缓存了,通过这个思路,下面以JSP为例子给大家提供一个简单说明:

我们在页面上生成一个随机数:String ID= (int)(Math.random()*100+100)+"";

设置ID=request.QueryString("ID")

文本框的名称name设置为:name="title<%=ID%>"

提交处:<postfield name="title" value="$title<%=ID%>"/>

这样每次修改进去,由于表单名称都不同,因此就会读取最新记录,而不是缓存信息!

代码如下:

Java代码 ?收藏代码
  1. <%@?page?language="java"?contentType="text/vnd.wap.wml;?charset=GB2312"??
  2. ????????import="java.util.HashMap"??
  3. ????????import="com.kingtop.pfb.*"??
  4. %>??
  5. %><?xml?version="1.0"?>??
  6. <!DOCTYPE?wml?PUBLIC?"-//WAPFORUM//DTD?WML?1.1//EN"?"http://www.wapforum.org/DTD/wml_1.1.xml">??
  7. <wml>??
  8. <head>??
  9. ??<meta?http-equiv="Cache-Control"?content="max-age=0"?forua="true"/>??
  10. ??<meta?http-equiv="Cache-Control"?content="no-cache"/>??
  11. </head>??
  12. <card?id="Home"?title="加入电子优惠券">??
  13. <%??
  14. String?aa?=?(int)(Math.random()*100+100)+"";??
  15. String?s___??=?String.valueOf(System.currentTimeMillis());??
  16. String?m?=?request.getParameter("m");??
  17. String?code?=?request.getParameter("code");??
  18. EwmWapClient?ewc?=?new?EwmWapClient();??
  19. Object[]?data?=?null;??
  20. if?(?!"".equals(m))??
  21. {???
  22. ????data?=?ewc.yhq_add_kc(m,code);??
  23. ????int?ret?=?Integer.parseInt((String)data[0]);??
  24. ????String?msg?=?(String)data[1];??
  25. ????if?(?ret?==?0?)??{??
  26. ????????out.println("<a?href=\"youhuiquan.jsp?m="+m+"&s___="+s___+"\">增加成功,进入列表</a>");???
  27. ????}else{??
  28. ????????out.println(msg);??
  29. ????}??
  30. }??
  31. out.println("m="+m);??
  32. out.println("code="+code);??
  33. out.print("aa="+aa);??
  34. %>??
  35. <p?align="left">??
  36. <fieldset?title="加入电子优惠券">??
  37. 手机号:<input?type="text"?name="m<%=aa?%>"?size="12"?format="*n"?maxlength="11"/><br/>??
  38. 数字码:<input?type="text"?name="code<%=aa?%>"?size="13"?format="*n"?maxlength="12"/>??
  39. </fieldset>??
  40. <anchor?title="手机号">??
  41. <go?method="post"?href="<%=request.getRequestURI()%>?s___=<%=s___%>">??
  42. <postfield?name="m"?value="$(m<%=aa?%>)"/>??
  43. <postfield?name="code"?value="$(code<%=aa?%>)"/>??
  44. </go>提交??
  45. </anchor>??
  46. ??
  47. <br/><br/><a?href="index.jsp?s___=<%=s___%>">返回</a>??
  48. </p>??
  49. </card>??
  50. </wml> ?




    如何去除WAP页面输入框缓存?
    在WAP页面输入框的缓存是让用户感到很头疼的东西,很多时候我们第二次访问同一个输入框是想重新输入值的,结果页面响应给我们的框里却遗留了上一次输入的值。还需要手动的删除上一次数据再重新输入数据。从这个操作上来说让用户体验很不流畅,或者说给用户使用带来了阻力。
    ? ? ? ? 为了规避这种输入框缓存,我们可以利用随机数,如参数param我们可以写成 param + random

  相关解决方案