私はデータテーブルを持っています。dataTable のデータは、ajax を介して埋められます。テーブルの行には、ボタンなどのフォーム要素が含まれています。datatTable のボタンは別のページを参照する必要がありますが、それらをクリックすると現在のページがリロードされます。
ここにいくつかのコード:
バッキング Bean:
@ManagedBean(name="bean")
@SessionScoped
public class Bean {
private List<String> data;
@PostConstruct
public void postConstruct() {
data = new ArrayList<String>();
}
public void fillTable() {
data.add("E1");
data.add("E2");
data.add("E3");
}
public String outcome(){
return "/faces/test/edit.jsf";
}
public List<String> getData() {
return data;
}
public void setData(List<String> data) {
this.data = data;
}
}
ページ:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org /TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html" >
<h:body>
<h:form id="form">
<h:commandButton value="fillTable">
<f:ajax listener="#{bean.fillTable()}" render="@form"/>
</h:commandButton>
<h:dataTable id="table" var="data" value="#{bean.data}">
<h:column>
<h:outputText value="#{data}" />
</h:column>
<h:column>
<h:commandButton value="edit" action="#{bean.outcome}" />
</h:column>
</h:dataTable>
</h:form>
</h:body>
</html>
これには、フォームが既に dom にあり、ボタンがページに遅延読み込みされていることが関係していることを知っています (誰かがより具体的であることができれば、私は非常に喜んでいます)。
ただし、バッキング Bean の Scope を SessionScope に変更すると機能します。ボタンは右のページにリダイレクトします。なんで?