gpt4 book ai didi

java - Primefaces tabView activeIndex 属性总是为空

转载 作者:行者123 更新时间:2023-11-30 11:48:37 28 4
gpt4 key购买 nike

Primefaces tabView activeIndex 属性总是为空。

我的view.jsf:

<h:form>
<p:growl id="growl" showDetail="true" />
<p:tabView >
<p:ajax event="myForm" listener="#{employeeEdit.onTabChange}" />
<p:tab id="basic" title="Login">
</p:tab>
<p:tab id="personal" title="Personal">
</p:tab>
<p:tab id="contact" title="Contact">
</p:tab>
</p:tabView>

我的 edit.jsf:

<h:form prependId="false" >
<p:tabView id="myid" activeIndex="#{employeeEdit.tabIndex}" >
<p:tab id="basic" title="Login">
</p:tab>
<p:tab id="personal" title="Personal">
</p:tab>
<p:tab id="contact" title="Contact">
</p:tab>
</p:tabView>

支持 bean:EmployeeEdit.java:

@Component("employeeEdit")
@ViewScoped
@Repository
public class EmployeeEdit implements Serializable{

/**
*
*/
private static final long serialVersionUID = -2784529548783517864L;
private EmployeeDTO employeeDTO = new EmployeeDTO();
public static HibernateTemplate hibernateTemplate;
private int tabIndex;

@Autowired
public void setSessionFactory(SessionFactory sessionFactory)
{
System.out.println("in SessionFactory" +sessionFactory);
this.hibernateTemplate = new HibernateTemplate(sessionFactory);
System.out.println("in SessionFactory" +hibernateTemplate);

}


public int onTabChange(TabChangeEvent event) {

System.out.println("tab id = " + event.getTab().getId()+event.getTab().getTitle());
if(event.getTab().getId().equals("personal"))
{
tabIndex =0;
}
else if(event.getTab().getId().equals("address"))
{
tabIndex =1;
}
else
{
tabIndex =2;
}
System.out.println("tabIndex = "+tabIndex);
return tabIndex;
}



public void edit() throws IOException
{

FacesContext.getCurrentInstance().getExternalContext().redirect("/employeeedit.jsf");
}



public void cancel() throws IOException
{
FacesContext.getCurrentInstance().getExternalContext().redirect("/employeelist.jsf");
}

public EmployeeDTO getEmployeeDTO() {
return employeeDTO;
}

public void setEmployeeDTO(EmployeeDTO employeeDTO) {
this.employeeDTO = employeeDTO;
}

public int getTabIndex() {
return tabIndex;
}

public void setTabIndex(int tabIndex) {
this.tabIndex = tabIndex;
}
}

但总是得到tabIndex=0;为什么会这样? AJAX 工作正常。但是在单击 View 页面中的编辑按钮时,tabIndex 变为空。在 view.jsf 中,我的命令按钮是

<p:commandButton value="Edit" actionListener="#{employeeEdit.edit}" />

我的 primefaces 版本是:primefaces-3.0.M3 with Google Cloud SQL

最佳答案

其实我觉得你可能不需要用@SessionScoped bean 。事实上,如果不经常重用这个 bean 中的数据,可能会造成很大的资源浪费。

我认为你应该保留你的 bean @ViewScoped并利用<f:param> .你可以试试这个:

<p:tabView id="myid" activeIndex="#{param.tabIndex}" >
...
</p:tabView>

<p:commandButton value="Edit" action="employeeedit" ajax="false">
<f:param name="tabIndex" value="#{employeeEdit.tabIndex}" />
</p:commandButton>

这可能会为您节省一些资源,而且您不需要 edit功能只是将用户重定向到编辑页面。

关于java - Primefaces tabView activeIndex 属性总是为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8701806/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com