我有一個XHTML頁面上提交回自己。
支持bean是會話作用域。在重定向到它自己的頁面上呈現h:dataable兩次,並給我重複的id錯誤。我可以直觀地看到表格被兩次渲染並且彼此相鄰。
我發現它有一點與backing bean具有faces html表的屬性有關,並且在返回時會再次創建,但最新的解決方案。JSF數據表綁定與會議作用域後臺bean得到渲染一次又一次每個請求
以下內容大致來自JavaBeat的tutorial。唯一的區別是我的支持bean是Session Scoped。
我也releaize我的問題可能不清除它不夠好,但代碼應該在這裏:)這是
支持bean
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.component.html.HtmlDataTable;
import javax.faces.event.ValueChangeEvent;
import com.example.common.web.bean.BaseBean;
@ManagedBean(name = "registrationBean")
@SessionScoped
public class RegisterationViewManagedBean extends BaseBean {
private String field;
private List<Employee> employees;
private Employee employee;
private HtmlDataTable htmlDataTable;
private List<Employee> list = new ArrayList();
public void setSelected(ValueChangeEvent event) {
employee = (Employee) htmlDataTable.getRowData();
list = new ArrayList<Employee>();
list.add(employee);
}
public List<Employee> getEmployees() {
return employees;
}
public void setEmployees(List<Employee> employees) {
this.employees = employees;
}
public HtmlDataTable getHtmlDataTable() {
return htmlDataTable;
}
public void setHtmlDataTable(HtmlDataTable htmlDataTable) {
this.htmlDataTable = htmlDataTable;
}
public Employee getEmployee() {
return employee;
}
public void setEmployee(Employee employee) {
this.employee = employee;
}
public String getField() {
return field;
}
public void setField(String field) {
this.field = field;
}
public String dataSubmit() {
for (Employee employee : this.list) {
System.out.println(employee.getCity());
System.out.println(employee.getName());
System.out.println(employee.getEmpNo());
}
return "success";
}
public String submit() {
this.employees = new ArrayList<Employee>();
Employee employee1 = new Employee();
employee1.setCity("Bangalore");
employee1.setEmpNo("1");
employee1.setName("Krishna");
Employee employee2 = new Employee();
employee2.setCity("Bangalore");
employee2.setEmpNo("2");
employee2.setName("ShunmugaRaja");
Employee employee3 = new Employee();
employee3.setCity("Bangalore");
employee3.setEmpNo("3");
employee3.setName("JoyChristy");
this.employees.add(employee1);
this.employees.add(employee2);
this.employees.add(employee3);
return "success";
}
}
XHTML頁面
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<ui:define name="body">
<h:form>
<h:dataTable var="loc" value="#{registrationBean.employees}"
binding="#{registrationBean.htmlDataTable}">
<h:column>
<h:selectOneRadio onclick="radioButton(this);"
valueChangeListener="#{registrationBean.setSelected}">
<f:selectItem itemValue="null" />
</h:selectOneRadio>
</h:column>
<h:column>
<h:outputText value="#{loc.name}" />
</h:column>
<h:column>
<h:outputText value="#{loc.empNo}" />
</h:column>
<h:column>
<h:outputText value="#{loc.city}" />
</h:column>
</h:dataTable>
<!-- Summary ends -->
<div class="submitButtons">
<h:commandButton id="register" action="#{registrationBean.submit}"
value="Perform Some Action" />
</div>
</h:form>
</ui:define>
</ui:composition>
堆棧跟蹤
Caused by: java.lang.IllegalStateException: component with duplicate id "j_id397249623_10fed7a7:j_id397249623_10fed7bd:j_id397249623_10fed793" found
at org.apache.myfaces.view.facelets.DefaultFaceletsStateManagementStrategy.checkIds(DefaultFaceletsStateManagementStrategy.java:784)
at org.apache.myfaces.view.facelets.DefaultFaceletsStateManagementStrategy.checkIds(DefaultFaceletsStateManagementStrategy.java:800)
at org.apache.myfaces.view.facelets.DefaultFaceletsStateManagementStrategy.checkIds(DefaultFaceletsStateManagementStrategy.java:800)
at org.apache.myfaces.view.facelets.DefaultFaceletsStateManagementStrategy.checkIds(DefaultFaceletsStateManagementStrategy.java:800)
at org.apache.myfaces.view.facelets.DefaultFaceletsStateManagementStrategy.saveView(DefaultFaceletsStateManagementStrategy.java:432)
at org.apache.myfaces.application.StateManagerImpl.saveView(StateManagerImpl.java:160)
at org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguage.renderView(FaceletViewDeclarationLanguage.java:1554)
at org.apache.myfaces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:281)
at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:59)
at org.apache.myfaces.tomahawk.application.ResourceViewHandlerWrapper.renderView(ResourceViewHandlerWrapper.java:93)
at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:59)
at org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:85)
at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:239)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:191)
快
@ Java Ka Baby upvoting我也想知道答案。 – amod
任何想法@BalusC? –
一切看起來都很好。我首先排除Facelet模板組合和MyFaces被懷疑。在基本的''頁面中測試它,沒有任何模板包含/定義/組合。如果解決了這個問題,那麼你必須展示你的頁面是如何組成的,也許你做了一個Facelet模板設計的錯誤。如果不是這樣,用Mojarra而不是MyFaces進行測試。如果解決了這個問題,請將它作爲MyFaces傢伙的錯誤報告,以及一個* complete * SSCCE。 – BalusC