我有一个带有jjified标签的JSF 2.0 Web应用程序。
要切换标签,我会显示一个并隐藏其他标签(使用条件render="#{x==y}"
或使用display:none/block
通过条件styleClass
进行隐藏。
在任何一种情况下,我都可以正确显示或隐藏标签。
问题是输入框中输入的值不会保留,会隐藏/显示选项卡(换句话说,如果在选项卡1中输入一些值,请转到选项卡2并返回选项卡1,价值不保留。)
我在选项卡选择上使用此<f:ajax>
标记(由哈希更改事件引发)
<h:form id="processFragment" prependId="false" class="hide">
<h:inputText id="fragment" value="#{fbean.fragment}">
<f:ajax event="change" execute="contentSection" listener="#{fbean.processFragment}"
render="contentSection" />
</h:inputText>
</h:form>
<div>
<h:form id="contentSection">
<ui:insert name="content" />
</h:form>
</div>
谢谢!
显示标签栏和标签内容的代码:
<ui:define name="content">
<f:view>
<h:panelGroup styleClass="navBar">
<ul>
<ui:repeat value="#{hello.tabList}" var="tab">
<li onclick="window.location='\##{tab.tabHash}'"><h:panelGroup
styleClass="#{hello.chose == tab.tabHash?'activeTab':''}">
<h:outputText value="#{tab.tabName}" />
</h:panelGroup>
</li>
</ui:repeat>
</ul>
</h:panelGroup>
<h:panelGroup id="contentPanels" styleClass="tabContentBar">
<c:forEach items="#{hello.tabList}" var="tab">
<h:panelGroup rendered="#{hello.chose == tab.tabHash}">
<!-- <h:panelGroup styleClass="#{hello.chose == tab.tabHash?'shownTabContents':'hiddenTabContents'}"> -->
<ui:include src="#{tab.tabFile}" />
</h:panelGroup>
</c:forEach>
</h:panelGroup>
</f:view>
</ui:define>
最后,具体标签的内容:
<h:outputText value="TESTING 1" />
<h:panelGroup styleClass="formField">
<h:outputText value="Enter Value:" />
<h:inputText value="#{general.name}" />
</h:panelGroup>
更新 只是注意到即使我没有隐藏选项卡并按下按钮,该值也会重置。调查...
答案 0 :(得分:1)
只有在使用视图范围bean并且在标签导航期间(或之前)将所需表单提交到服务器端时,才会保留这些值。
作为替代方案,您可以一次渲染所有选项卡,并仅使用JS / CSS显示/隐藏选项卡内容。 CSS隐藏的输入仍将提交给服务器端。