我对Tapestry(5.3版)的行为有疑问:
我有一个'web应用程序'(带有tomcat6的本地服务器,没有http://),其中有多个页面连接到MySQL数据库。带<t:form>
的{{1}}会向数据库发送搜索查询,然后返回一个页面,其中包含搜索参数的内容通过<t:submit>
打印到.tml页面。在重新加载页面或返回并再次搜索相同的参数(例如字符串)时,页面不再显示任何非静态内容(字符串内容不会静态写入.tml)。我已经尝试了不同的重新加载方法,但它始终是相同的空白输出。
代码:
包含输出的页面打印如下:
<t:outputraw>
我还试图检查问题发生的部分
<p style="line-spacing: 12px">
<t:loop source="List" value="StringEntry">
<t:if test="continuecondition">
<t:outputraw value="FoundString" />
<br />
</t:if>
</t:loop>
</p>
listSize包含搜索后的查询结果,printedLineCount等于continueCondition的数量为true(页面上打印行数)。
出现问题时,Java列表应尽可能大,而另一个值为零,因此不会在页面上显示任何输出。我现在的问题是,为什么它只打印一次内容(页面创建),而不是每次(重新)加载页面?它与浏览器/服务器缓存有关吗?如果是的话,我可以做什么来抛弃缓存并以这种方式重新加载它,它会再次出现?或者如果没有,我可以做些什么来破坏PageLink并重新创建它,如果已经存在?
提前致谢, 亲切的问候
附注:重新启动浏览器可以解决问题。 (在第一次搜索时一切都很好,但如果你重新加载页面或再次搜索同一个查询,错误是一样的)
答案 0 :(得分:0)
Response
对象为您提供了一种设置(覆盖)标头的方法;这些标头必须请求浏览器而不是来缓存页面。
典型的标题是
@Inject
private Response response;
...
response.setDateHeader("Expires", 0);
response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
response.setHeader("Cache-Control", "post-check=0, pre-check=0");
response.setHeader("Pragma", "no-cache");
标题可以从任何框架发送,这里是关于“无缓存”标题的more information。