单一形式内primefaces手风琴面板 - 仅打开的选项卡上验证

问题描述 投票:3回答:1

我已经检查各地,但我没有找到如何使用单一表单提交手风琴一个明显的例子。我觉得问题是,当我要处理(生效)只有打开的选项卡的领域。

我的网页的结构如下:

<h:form>
    <p:accordionPanel activeIndex="#{bean.selectedTab}">
        <p:ajax event="tabChange" listener="#{bean.tabChangeListener}"/>

        <p:tab title="Tab1" id="t1">
            <p:inputText id="reqField1" required="true"/>
        </p:tab>
        <p:tab title="Tab2" id="t2">
            <p:inputText id="reqField2" required="true"/>
        </p:tab>
   </p:accordionPanel>

   <p:commandButton update="list" immediate="true" actionListener="#{bean.addRecord}"/>                     
</h:form>

方法:

@SessionScoped
public class Bean{
    public void tabChangeListener(AjaxBehaviorEvent evt){
        AccordionPanel panel = (AccordionPanel) evt.getComponent();
        // getLoadedTabs() returns an empty list
        String currentlyLoadedTabId = panel.getLoadedTabs().get(this.selectedTab).getClientId(); 

    }
}

反正是有指定当前打开的选项卡的ID如在发p过程属性的一部分:的commandButton标签?

UPDATE TAB1时是开放的,在提交,我想验证只有reqField1而不是reqField2。反之亦然,当TAB2是开放的,我想验证只有reqField2而不是reqField1。

jsf primefaces validation accordion
1个回答
0
投票

尝试这个。

  1. 绑定accordionPanel的activeIndex到后台bean属性INT activeIndex="#{myBean.selectedTab}"
  2. 使用绑定id获取当前选定的选项卡的activeIndex。要在actionListener做到这一点,得到了手风琴面板上的手柄 编辑:既然你actionListener已被设置为immediateactiveIndexselectedTab需要通过AJAX更新。以下<p:ajax/>添加到您的accordionPanel <p:ajax event="tabChange" listener="#{bean.tabChangeListener}" /> 在您的支持bean,你现在就得 public void (AjaxBehaviorEvent evt){ AccordionPanel panel = (AccordionPanel) evt.getComponent(); String currentlyLoadedTabId = panel.getLoadedTabs().get(this.selectedTab).getClientId(); }
  3. 使用你从上面2拿到了id,可以包含在物联网使用在服务器端AJAX来重新描绘的JSF列表。在同样的动作监听器方法: FacesContext.getCurrentInstance().getPartialViewContext().getRenderIds().add(currentlyLoadedTabId);

或者,你可能只是考虑将在每个这些标签的命令按钮并具有每个选项卡形式为好。这样,每个命令按钮只处理它自己的父窗体

© www.soinside.com 2019 - 2024. All rights reserved.