0
当第一个窗体(id =“form1”)inputText没有值时,我无法获取tabChange事件。当我在inputText中提供一个值时,tabChange事件将触发。这样说真正的问题将是如何重组下面,以便onChange将在第一个选项卡的inputText为空时触发。我的每个选项卡都有不同的表单,因为它们每个都具有特定于每个选项卡的数据输入和处理。Primefaces 3.0.1 TabView p:ajax tabChange事件验证失败时未触发
<html xmlns="http://www.w3c.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui">
<h:head>
</h:head>
<h:body>
<p:tabView>
<p:ajax event="tabChange" listener="#{tabBean.onTabChange}"/>
<p:tab title="Tab I">
<h:form id="form1">
<p:inputText value="#{tabBean.inText}" required="true" requiredMessage="Required Field"/>
<p:commandButton value="test" actionListener="#{tabBean.submit}"/>
</h:form>
</p:tab>
<p:tab title="Tab II">
<h:form id="form2">
tab 2 content
</h:form>
</p:tab>
</p:tabView>
</h:body>
</html>
//Bean
public class TabBean extends BaseSessionBean{
private String inText;
public void onTabChange(TabChangeEvent event) {
FacesMessage msg = new FacesMessage("Tab Changed", "Active Tab: " + event.getTab().getTitle());
FacesContext.getCurrentInstance().addMessage(null, msg);
}
public void submit(ActionEvent actionEvent){
System.out.println("form submitted");
}
public String getInText() {
return inText;
}
public void setInText(String inText) {
this.inText = inText;
}
}
一个解决方法:(删除需要验证)
<p:inputText value="#{adminBean.registerationLocation}">
<p:ajax event="blur"/>
</p:inputText>
唯一的解决方法我有福了und是删除required =“true”并验证blur事件何时触发inputText,以便在tabView的onChange触发时不会验证inputText,因为在我的情况下表单为空,并且用户转到另一个选项卡是需要的。上面更新的代码。 – c12 2012-02-01 04:08:56