Динамический DataTable отображает пустые строки - PullRequest
1 голос
/ 01 марта 2012

Я пытаюсь создать динамическую таблицу данных без привязки. Потому что привязка не работает с 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;
}


}
} 

Если я обновлю значения списка, он никогда не будет напечатан и отображаются пустые строки ....

Я разочаровался в течение прошлой недели из-за этого .......

Просьба ответить за это ....

В поисках решения

...