Tapestry:重新加载页面清空页面内容

Tapestry: Reloading page empties page content

我对 Tapestry(版本 5.3)的行为有疑问: 我有一个 'web application'(带有 tomcat6 的本地服务器,没有 http://),其中包含多个连接到 MySQL 数据库的页面。 <t:form><t:submit> 将向数据库发送搜索查询,然后数据库将 return 一个页面,其中包含搜索参数的内容通过 <t:outputraw> 打印到 .tml 页面.在重新加载页面或返回并再次搜索相同参数(例如字符串)时,页面不再显示任何非静态内容(字符串内容未静态写入 .tml)。我已经尝试过不同的重新加载方法,但它总是相同的空白输出。

代码:

包含输出的页面打印如下:

<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>

我也试过检查是哪一部分出了问题

<p>
      <b>${listSize} </b>  <br/>
      <b>${printedLineCount}</b> 
  </p>

listSize包含搜索后的查询结果,printedLineCount等于continueCondition为true的次数(页面打印行数)。

当问题发生时,Java 列表是它应该的那么大,而另一个值为零,因此页面上没有显示任何输出。我现在的问题是,为什么它只打印一次内容(创建页面)而不是每次(重新)加载页面时打印内容?与 browser/server 缓存有关吗?如果是,我可以做些什么来丢弃缓存并以这种方式重新加载它,它会再次显示吗?或者,如果没有,我是否可以做些什么来销毁 PageLink 并在已经存在的情况下重新创建它?

提前致谢, 亲切的问候

旁注:重启浏览器即可解决问题。 (第一次搜索一切正常,但如果你重新加载页面或再次搜索相同的查询,错误是一样的)

Response object 为您提供了一种设置(覆盖) headers 的方法;这些 headers 必须请求浏览器 而不是 缓存页面。

典型的headers是

@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");

Headers可以从任何框架发送,这里是more information关于"no caching"headers.