我的网页设置如下,网址为my.page.com/table.xhtml?id=123
:
+----------------------------------------------+
|Meta information |
|----------------------------------------------|
| Search Fields Submit btn |
|----------------------------------------------|
| |
| |
| Big p:dataTable |
| with rowExpansion |
| |
|----------------------------------------------|
| Pager |
+----------------------------------------------+
id=123
是控制结果表中内容的请求参数。所有操作仅使用AJAX
重新加载数据表。
id
通过以下方式加载:
<f:metadata>
<o:viewParam name="id" value="#{dataTable.id}" />
<f:viewAction action="#{dataTable.initialize}" />
</f:metadata>
一切正常,直到会话到期。在这一点上,没有任何作用。我无法获取数据,因为我无法访问有问题的id
,并且对获取数据的DAO
类的调用没有这个。
通过&#34; 无法再访问id
&#34;我的意思是:
FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("id")
返回null
。此外,来自我的支持bean的int id
(通过o:viewParam
中的f:metadata
加载也遭受同样的命运。
我知道有一些方法可以捕获ViewExpiredException
,但这不是我想要的。我需要页面只需使用request参数(在本例中为id
)重新加载所有值,而无需用户知道。
我(我想)我需要一个@ViewScoped
manage bean来控制这个复杂的表和所有参数等。
我对此感到茫然。我尝试构建自己的ViewHandler
以尝试简单地重建(模仿刷新)页面,并尝试在其他解决方案中使用PrimeFaces
ajaxExceptionHandler
。但所有这些都会出错并显示出来。我只想从支持bean访问我的请求参数my.page.com/table.xhtml
?id=123
。
任何帮助都将不胜感激。
我正在竞选:
答案 0 :(得分:3)
至于通过完全重新创建它来绕过过期的视图,将<o:enableRestorableView>
添加到元数据中:
<f:metadata>
...
<o:enableRestorableView />
</f:metadata>
至于保留请求参数,要么在表单中添加一个纯HTML隐藏输入字段:
<h:form>
...
<input type="hidden" name="id" value="#{dataTable.id}" />
</h:form>
或将<o:form>
与includeViewParams="true"
,includeRequestParams="true"
或useRequestURI="true"
一起使用,具体取决于您是否要提交给JSF视图ID使用所有视图参数,或使用整个请求查询字符串的JSF视图ID,或整个请求URI(包括查询字符串):
<o:form includeViewParams="true">
...
</o:form>
至于在回溯到JSF生命周期的所有阶段之前重新初始化bean的状态,你需要通过手动抓取<o:viewParam>
和<f:viewAction>
@PostConstruct
替换@PostConstruct
public void initialize() {
id = Faces.getRequestParameter("id");
// ...
}
。 }:
{{1}}
答案 1 :(得分:0)
我尝试了以上所有这些并且没有在mojarra 2.2.5中工作
只需将mojara更改为mojarra 2.2.8即可在不添加任何代码的情况下解决