다음과 같이 <p:dataTable>
이 있습니다.p : dataTable/p : dataGrid 및 f : setPropertyActionListener의 지연로드
<p:dataTable var="row" value="#{testManagedBean.list}">
<p:column>
<h:outputText value="#{row.subCatId}"/>
</p:column>
<p:column>
<p:commandLink process="@this">
<h:outputText value="#{row.subCatName}"/>
<f:setPropertyActionListener target="#{testManagedBean.subCatName}" value="#{row.subCatName}"/>
</p:commandLink>
</p:column>
</p:dataTable>
관리 빈인 RequestScoped
관리 빈은 다음과 같습니다. <p:dataTable>
내부 <p:commandLink>
이 클릭되면
@ManagedBean
@RequestScoped
public final class TestManagedBean
{
@EJB
private final TestBeanLocal testService=null;
private List<SubCategory>list;
private String subCatName;
@PostConstruct
private void init()
{
list=testService.getSubCategoryList();
}
public List<SubCategory> getList() {
return list;
}
public String getSubCatName() {
return subCatName;
}
public void setSubCatName(String subCatName) {
System.out.println("setSubCatName() called : "+subCatName);
this.subCatName = subCatName;
}
}
은 <f:setProperyActionListener>
(setSubCatName()
)와 관련된 대응하는 설정 메소드가 호출되고, 그 값은 정확하게이 빈 관리에 subCatName
된 목표 속성으로 설정된다.
필자는 페이징과 같은 많은 것들을 피하면서 최소한의 예를 가지고 있습니다.
지금, 나는 게으르게이 <p:dataTable>
를 채울 필요가있다. 이 <p:dataTable>
과 해당 관리 빈을 다음과 같이 변경하려고합니다.
<p:dataTable var="row" value="#{testManagedBean}" lazy="true" rows="10" rowIndexVar="rowIndex">
<p:column>
<h:outputText value="#{row.subCatId}"/>
</p:column>
<p:column>
<p:commandLink process="@this">
<h:outputText value="#{row.subCatName}"/>
<f:setPropertyActionListener target="#{testManagedBean.subCatName}" value="#{row.subCatName}"/>
</p:commandLink>
</p:column>
</p:dataTable>
관리되는 관련 JSF가 아래에 나와 있습니다. <p:dataTable>
내부 <p:commandLink>
이 클릭되면
@ManagedBean
@RequestScoped
public final class TestManagedBean extends LazyDataModel<SubCategory> implements Serializable
{
@EJB
private final TestBeanLocal testService=null;
private String subCatName;
private static final long serialVersionUID = 1L;
public String getSubCatName() {
return subCatName;
}
public void setSubCatName(String subCatName) {
System.out.println("setSubCatName() called : "+subCatName);
this.subCatName = subCatName;
}
@Override
public List<SubCategory> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, String> filters)
{
setRowCount(4); //Just an example. Otherwise, fetch from the database.
return testService.getSubCategoryList(first, pageSize, sortField, sortOrder, filters);
}
}
이제, 해당 세터 방법 <f:setProperyActionListener>
(setSubCatName()
)과 관련된 호출 하지이다. 관리 빈은
는 왜 요청하지 <f:setPropertyActionListener>
작업이 관리 관리의 범주가 지정된 않는다 (true로 설정되어 lazy
의 경우) @ViewScoped
같은 넓은 범위를 장식 할 때
setSubCatName()
은, 호출 콩, <p:dataTable>
(또한 <p:dataGrid>
에 해당)은 지연로드?
이러한 경우에는 요청 범위보다 넓은 관리 빈을 지정해야합니까?
고맙습니다! :) – Tiny
당신은 환영합니다;) –