【发布时间】:2013-10-31 12:11:18
【问题描述】:
我需要根据某些输入字段显示响应页面。例如。 tabid input隐藏在下面:
#{controllerBean.tabId}
...
<h:form id="edit">
<h:inputHidden value="#{controllerBean.tabId}" id="tabid" />
<h:inputText value="#{controllerBean.name}" id="name" />
</h:form>
但是当同一表单中的其他一些输入出现验证错误时(例如“名称”inputText)。由于 JSF 在验证阶段返回,因此不会分配“controllerBean.tabId”值。
我仍然需要 tabId 才能正确显示页面并记住 2 个想法:
#{param['edit:tabid']}
或使用绑定:
#{tabId.value}
<h:inputHidden value="#{controllerBean.tabId}" id="tabid" binding="tabId" />
我的问题是,这两个中哪一个更好或最佳实践?还是有更好的方法来做到这一点?
更新:
注意。在我的具体情况下,tabid 是由客户端 javascript 设置的。
- 服务器回复 html 中的一些项目。
- Javascript 将这些项目放入页面上的不同选项卡中。
- 其中一个选项卡使用表单中的当前 tabid 将数据 POST 到服务器。
所以我的服务器需要知道 tabid 才能显示选择了正确选项卡的响应页面。
【问题讨论】:
-
但是你在 managedBean 哪里需要它,但是如果发生验证错误,你的托管 bean 将不会被调用。
-
不是我的 bean 需要它,而是我的页面。具体来说,我的页面需要 tabid 才能知道要显示哪个标签
-
你有机会和
@ViewScoped一起去吗?这将允许您在 bean 中保留当前选项卡 ID。 -
tabid是客户端javascript指定的,所以原页面没有。我认为视图范围也无济于事(不使用 ajax):( 用我的具体情况更新了问题。
-
在 bean 中是否需要
tabId用于其他用途?或者您是否只有一个属性+getter+setter,它在例如期间使用的 bean 中是 nowhere else行动?