Bom dia gente
Estou com um problema, quando clico em “Mostrar produto” que ele abre o “dialog”, quando adiciono a linha <p:inputText size=“20” Value="#categoriaBean.selected.nome}"/>
Da erro e não pega a informação que está no selected e aparece o erro dizendo que está null… Quando retiro essa linha so deixo as outras funciona normalmente.
O que pode está acontecer?
Obrigado ae.
<h:form id="frmBrowser">
<p:dataTable value="#{categoriaBean.categoriaList}" var="cat"
selection="#{categoriaBean.selected}" selectionMode="single"
rowKey="#{cat.idCategoria}"
emptyMessage="Nenhum produto encontrado!" style="margin-top: 5px;">
<p:column id="campoidcategoria" sortBy="#{cat.idCategoria}"
filterBy="#{cat.idCategoria}" style="width: 0%">
<f:facet name="header">
<h:outputText value="Código" />
</f:facet>
<h:outputText value="#{cat.idCategoria}" />
</p:column>
<p:column id="campocategoria" sortBy="#{cat.nome}"
filterBy="#{cat.nome}" style="width: 0%">
<f:facet name="header">
<h:outputText value="Categoria" />
</f:facet>
<h:outputText value="#{cat.nome}" />
</p:column>
<p:column id="campoidcatsup" sortBy="#{cat.descricao}"
filterBy="#{cat.descricao}" style="width: 0%">
<f:facet name="header">
<h:outputText value="Categoria Superior" />
</f:facet>
<h:outputText value="#{cat.descricao}" />
</p:column>
<f:facet name="footer">
<p:commandButton id="viewButton" value="Mostrar produto"
icon="ui-icon-search" update=":frmBrowser:display"
oncomplete="productDialog.show()" />
</f:facet>
</p:dataTable>
<p:dialog id="dialog" header="Produto selecionado"
widgetVar="productDialog" resizable="false" width="400"
showEffect="clip" hideEffect="fold">
<h:panelGrid id="display" columns="2" cellpadding="4">
<h:outputText value="Nome:" />
<h:outputText value="#{categoriaBean.selected.idCategoria}" />
<h:outputText value="Teste:" />
<p:inputText size="20" Value="#{categoriaBean.selected.nome}"/>
<h:outputText value="Descrição:" />
<h:outputText value="#{categoriaBean.selected.nome}" />
<h:outputText value="Preço:" />
<h:outputText value="#{categoriaBean.selected.descricao}" />
</h:panelGrid>
</p:dialog>
</h:form>
Consegui resolver o problema de aparecer o que seleciono, coloquei o comando seguinte abaixo do datatable:
<p:ajax event="rowSelect" update=":frmBrowser:dialog" />
Porem ele está aparecendo o erro seguinte mesmo aparecendo o campo preenchido:
WARNING: /categoria/consulta.xhtml @89,70 value="#{categoriaBean.selected.nome}": Target Unreachable, 'selected' returned null
javax.el.PropertyNotFoundException: /categoria/consulta.xhtml @89,70 value="#{categoriaBean.selected.nome}": Target Unreachable, 'selected' returned null
Prezado,
Já fiz algo do tipo, assim:
<p:commandButton id="viewButton" value="Mostrar produto" icon="ui-icon-search" update=":frmBrowser:display" oncomplete="productDialog.show()">
<f:setPropertyActionListener value="#{cat}" target="#{categoriaBean.selected}" />
</p:commandButton>
se fizer por ajax:
<p:ajax event="rowSelect" update=":frmBrowser:dialog" listener="#{categoriaBean.minhaFuncao}" />
...
<p:dialog id="dialog" header="Produto selecionado"
widgetVar="productDialog" resizable="false" width="400"
showEffect="clip" hideEffect="fold">
<h:panelGrid id="display" columns="2" cellpadding="4">
<h:outputText value="Nome:" />
<h:outputText value="#{categoriaBean.selected.idCategoria}" />
<h:outputText value="Teste:" />
<p:inputText size="20" Value="#{categoriaBean.testeNome}"/>
...
onde:
public void minhaFuncao(SelectEvent se) {
this.testeNome = ((MinhaCategoria) se.getObject()).getNome())
}
[]'s
Tentei aqui, mas o erro continua.
Vê se te ajuda:
XHTML
<h:form id="princ">
<table width="900">
<tr>
<td align="left" valign="top" width="900">
<p:panel header="Relação de Exames" style="width:800px;">
<p:dataTable id="exames" var="exame" value="#{exameBean.listagem}" selection="#{exameBean.dado}" selectionMode="single" rowKey="#{exame.idAtendExame}">
<p:ajax event="rowSelect" listener="#{exameBean.actionSelecLinha}" update=":princ:detalhes1,:princ:detalhes2" oncomplete="dlg.show()" />
<p:column headerText="Exame">#{exame.nomExame}</p:column>
<p:column headerText="Valor">#{exame.valor}</p:column>
<p:column headerText="Observacao">#{exame.observacao}</p:column>
<p:column headerText="Divulga">#{exame.divulga}</p:column>
</p:dataTable>
</p:panel>
</td>
</tr>
</table>
<p:dialog header="Detalhamento" widgetVar="dlg" modal="true" showEffect="fade">
<p:outputPanel id="detalhes1" style="text-align:left;" layout="block">
<h:panelGrid columns="2" cellpadding="5" id="detalhes2">
<h:inputHidden value="#{exameBean.dado.idAtendExame}" />
<h:inputHidden value="#{exameBean.dado.idAtend}" />
<h:outputLabel value="Nome" />
<h:outputText value="#{exameBean.dado.nomExame}" />
<h:outputLabel value="Valor" />
<p:inputText value="#{exameBean.valor}" size="10" maxlength="10" disabled="#{exameBean.mostra}" />
<h:outputLabel value="Observacao" />
<p:inputText value="#{exameBean.observacao}" size="10" maxlength="50" />
<h:outputLabel value="Divulga" />
<p:selectOneRadio value="#{exameBean.divulga}">
<f:selectItem itemLabel="Sim" itemValue="S" />
<f:selectItem itemLabel="Não" itemValue="N" />
</p:selectOneRadio>
<p:commandButton value="Atualizar" actionListener="#{exameBean.actionAtualizar}" update=":princ:exames" oncomplete="dlg.hide()" />
<p:commandButton value="Sair" onclick="dlg.hide()" />
</h:panelGrid>
</p:outputPanel>
</p:dialog>
</h:form>
BEAN:
@ManagedBean(name="exameBean")
@ViewScoped
public class ExameBean {
private List<AtendExameTo> lista;
private AtendExameTo dado;
private String valor;
private String observacao;
private String divulga;
private ExameDataModel listagem;
private boolean mostra;
public List<AtendExameTo> getLista() {
return lista;
}
public void setLista(List<AtendExameTo> lista) {
this.lista = lista;
}
public AtendExameTo getDado() {
return dado;
}
public void setDado(AtendExameTo dado) {
this.dado = dado;
}
public String getValor() {
return valor;
}
public void setValor(String valor) {
this.valor = valor;
}
public String getObservacao() {
return observacao;
}
public void setObservacao(String observacao) {
this.observacao = observacao;
}
public String getDivulga() {
return divulga;
}
public void setDivulga(String divulga) {
this.divulga = divulga;
}
public ExameDataModel getListagem() {
return listagem;
}
public void setListagem(ExameDataModel listagem) {
this.listagem = listagem;
}
public boolean isMostra() {
return mostra;
}
public void setMostra(boolean mostra) {
this.mostra = mostra;
}
public ExameBean() {
AtendExameDao dao = null;
lista = new ArrayList<AtendExameTo>();
try {
dao = new AtendExameDao();
lista = dao.populaAtendExame();
listagem = new ExameDataModel(lista);
valor = "";
observacao = "";
divulga = "";
mostra = false;
} catch (Exception e) {
System.out.println("erro : " + e.toString());
}
}
public void actionSelecLinha(SelectEvent se) {
valor = ((AtendExameTo)se.getObject()).getValor();
observacao = ((AtendExameTo)se.getObject()).getObservacao();
divulga = ((AtendExameTo)se.getObject()).getDivulga();
if ("L".equals(((AtendExameTo)se.getObject()).getTipo())) {
mostra = false;
} else {
mostra = true;
}
}
public void actionAtualizar() {
int i = Integer.parseInt(""+(dado.getIdAtendExame()-(long)1));
lista.get(i).setValor(valor);
lista.get(i).setObservacao(observacao);
lista.get(i).setDivulga(divulga);
listagem = new ExameDataModel(lista);
}
}
DATAMODEL:
public class ExameDataModel extends ListDataModel<AtendExameTo> implements SelectableDataModel<AtendExameTo> {
public ExameDataModel() {
}
public ExameDataModel(List<AtendExameTo> data) {
super(data);
}
@SuppressWarnings("unchecked")
@Override
public AtendExameTo getRowData(String rowKey) {
List<AtendExameTo> lista = (List<AtendExameTo>)getWrappedData();
for (AtendExameTo to : lista) {
if (to.getIdAtendExame().equals(rowKey.toString())) {
return to;
}
}
return null;
}
@Override
public Object getRowKey(AtendExameTo to) {
return to.getIdAtendExame().toString();
}
}