개체 목록을 반복하는 dataGrid가 있습니다. 각 그리드에는 commandButton과 backing 빈에서 선택된 객체의 ID를 넣으려고하는 태그가 있지만 액션이 실행될 때와 속성의 setter 메소드에서도 값이 null입니다. 백킹 빈에서Primefaces : setPropertyActionListener. 매개 변수가 null 값을 가져옵니다.
<p:dataGrid var="element" value="#{CentroController.profiles}" columns="3"
rows="10" paginator="true" paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}" >
<p:panel header="#{CentroController.getDescripcionRoot(element)}" style="text-align:center">
<h:panelGrid columns="2" style="width:100%">
<p:panel>
<p:commandButton value="Borrar perfil" icon="ui-icon-trash" update=":form:tabView:profileButtonPanel" action="#{CentroController.deletePerfil}">
<f:setPropertyActionListener value="#{element.id}" target="#{CentroController.selectedItemId}" />
</p:commandButton>
</p:panel>
</h:panelGrid>
</p:panel>
</p:dataGrid>
:
세터가 호출public void deletePerfil()
{
System.out.println("SELECTED ITEM ID: " + this.selectedItemId);
// selectedItemID is always null
}
, 값도 null입니다 :
public void setSelectedItemId(BigDecimal selectedItemId) {
System.out.println(selectedItemId); // Value is null
this.selectedItemId = selectedItemId;
}
감사
여기 내 코드입니다.
편집 : 콩 코드 (관련없는 메소드를 삭제했습니다).
/* imports */
@Named("CentroController")
@SessionScoped
public class CentroController implements Serializable{
private @Inject CentrosDAO dao;
private @Inject CentrosCanalesDAO daoServicios;
private @Inject CatalogoCentrosLaboratorioDAO habitualLabDAO;
private @Inject CatalogoCentrosRadiologiaDAO habitualRadDAO;
private List<Centros> centros;
private Centros selectedCentro;
private List<CentrosCanales> selectedCanales=new ArrayList<CentrosCanales>();
private List<CentrosCanales> listado;
private CentrosCanales selected;
private CatalogoCentros selectedItem;
private BigDecimal selectedItemId;
private TreeNode root;
private DualListModel<Catalogo> listCatalogo;
private DualListModel <Catalogo> listCatalogoLabHabitual;
private DualListModel <Catalogo> listCatalogoRadHabitual;
private CatalogoCentros perfilNuevo=new CatalogoCentros();
private @Inject CentrosCanalesDAO consulta;
private @Inject CatalogoCentrosDAO consulta1;
private @Inject CatalogoDAO consulta2;
private boolean servicioIsSelected; //, perfilIsSelected, pruebaIsSelected;
private List<CatalogoCentros> profiles;
public CentroController() {
}
@PostConstruct
public void init(){
this.centros=dao.obtenListaCentros();
servicioIsSelected = false;
//perfilIsSelected = false;
}
public BigDecimal getSelectedItemId() {
return selectedItemId;
}
public void setSelectedItemId(BigDecimal selectedItemId) {
System.out.println(selectedItemId);
this.selectedItemId = selectedItemId;
}
public void deletePerfil()
{
System.out.println("SELECTED ITEM ID: " + this.selectedItemId);
}
}
UPDATED
데이터 격자는 데이터 테이블 내의 rowExpansion 태그 안에있다. DataGrid를 데이터 테이블에 중첩 대신 외부에 배치하면 작동한다는 것을 알았습니다. 하지만 나는 그것을 확장에서 원한다. 확장.
오직 작동합니다 내가 포함되어있는 tabView 외부에있는 DataGrid를 넣으면. CatalogoCentros에 대한
값이 실제로 'null'인지 확인하려면' '를 사용하십시오. –
user1983983
나는 이미 그 값을 예상했다. 감사합니다 – dhalfageme
코멘트 : Bean은 SessionScoped입니다. – dhalfageme