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.
我对 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.