Я пытаюсь создать динамическую таблицу данных без привязки. Потому что привязка не работает с bean-объектом вида. Но проблема заключается в том, что данные динамически отображаются только один раз. Если я попытаюсь изменить значения, он покажет пустые строки .....
ICEfaces 2.0.0
JSF 2.0
JSTL1.2
ViewScoped Так что привязка не работает
Welcome.xhtml
<h:form id="form">
<h:outputText value="Welcome to ICEfaces 2"/>
<ice:commandButton value="Start" action="#{table.start}"/>
<ice:commandButton value="Update" action="#{table.update}"/>
<ice:dataTable id="table" value="#{table.list}" var="currentRow" >
<ice:column rendered="false" id="row">
<ice:rowSelector multiple="false" selectionListener="#{table.selectionRowTable}" />
</ice:column>
</ice:dataTable>
</h:form>
JavaBean код
@ManagedBean (name="table")
@ViewScoped
public final class TestTable implements Serializable {
public sample list[]=new sample[5];
public sample[] getList() {
return list;
}
public void setList(sample[] list) {
this.list = list;
}
HtmlDataTable table=null;
public void createTable()
{
table=(HtmlDataTable)findComponent(FacesContext.getCurrentInstance().getViewRoot(), "table");
HtmlCommandButton commandSortHeader = new HtmlCommandButton();
commandSortHeader.setId("header");
HtmlOutputText headerComponent = new HtmlOutputText();
headerComponent.setId("headerComponentId");
headerComponent.setValue("Header");
ExpressionFactory factory = FacesContext.getCurrentInstance().getApplication().getExpressionFactory();
MethodExpression methodsexpression = factory.createMethodExpression(FacesContext.getCurrentInstance().getELContext(), "#{table.Test}", null, new Class[]{ActionEvent.class});
MethodExpressionActionListener actionListener = new MethodExpressionActionListener(methodsexpression);
commandSortHeader.addActionListener(actionListener);
commandSortHeader.getChildren().add(headerComponent);
UIColumn column=new UIColumn();
column.setId("column");
HtmlOutputText t=new HtmlOutputText();
t.setValueExpression("value",FacesContext.getCurrentInstance().getApplication().getExpressionFactory().createValueExpression(FacesContext.getCurrentInstance().getELContext(), "#{currentRow.name}",String.class));
t.setId("Text");
column.getChildren().add(t);
column.setHeader(commandSortHeader);
table.getChildren().add(column);
}
public void start()
{
for(int i=0;i<5;i++)
list[i]=new sample("OLD"+i);
createTable();
}
public void update()
{
for(int i=0;i<5;i++)
list[i]=new sample("NEW"+i);
}
public void Test(ActionEvent e)
{
System.out.println("Header Clicked");
}
public void selectionRowTable(RowSelectorEvent e)
{
System.out.println("Row Clicked");
}
public UIComponent findComponent(UIComponent parent, String id) {
if (id.equals(parent.getId())) {
return parent;
}
Iterator<UIComponent> kids = parent.getFacetsAndChildren();
while (kids.hasNext()) {
UIComponent kid = kids.next();
UIComponent found = findComponent(kid, id);
if (found != null) {
return found;
}
}
return null;
}
public class sample{
public String name;
public sample(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
}
Если я обновлю значения списка, он никогда не будет напечатан и отображаются пустые строки ....
Я разочаровался в течение прошлой недели из-за этого .......
Просьба ответить за это ....
В поисках решения