Target Unreachable,'movimentacao'返回null,但是Movimentacao对象在ManagedBean中初始化
Target Unreachable, 'movimentacao' returned null, but the Movimentacao object is initialized in ManagedBean
我正在尝试将一个对象保存在数据库中,并尝试将其从这个错误 Target Unreachable 中保存,'Movimentacao' 返回 null,但我正在 MangedBean 中初始化 Movimentacao 对象。
ManagedBean
@Named
@ViewScoped
public class PesquisaBemBean implements Serializable {
private static final long serialVersionUID = 1L;
private Movimentacao movimentacao;
@PostConstruct
public void inicializar(){
this.novo();
}
public void novo(){
this.movimentacao = new Movimentacao();
}
/*remaining code with your get and set*/
}
要保存的 XHTML 代码
<p:dialog id="movimentacaoDialogo" widgetVar="movimentacaoDialogo" closable="true" header="Movimentação"
draggable="false" resizable="false" responsive="true" >
<h:form id="frmMovimentacao">
<div class="row">
<div class="col-md-4 form-group">
<p:outputLabel value="N° tombamento"/>
<p:inputText value="#{pesquisaBemBean.movimentacao.numeroTombamento}"/>
</div>
<div class="col-md-8 form-group">
<p:outputLabel value="Setor:" />
<p:selectOneMenu value="#{pesquisaBemBean.movimentacao.setor}" style="width: 100%">
<f:selectItem itemLabel="Selecione" noSelectionOption="true" />
<f:selectItems var="setor" value="#{pesquisaBemBean.setores}"
itemValue="#{setor}" itemLabel="#{setor.descricao}"/>
</p:selectOneMenu>
</div>
</div>
<div class="row">
<div class="col-md-4 form-group">
<p:outputLabel value="Estado de Concervação"/>
<p:selectOneMenu style="width: 100%" value="#{pesquisaBemBean.movimentacao.estadoConservacao}">
<f:selectItem itemLabel="Selecione" noSelectionOption="true" />
<f:selectItems var="ec" value="#{pesquisaBemBean.estadoConcervacoes}"
itemValue="#{ec}" itemLabel="#{ec.descricao}"/>
</p:selectOneMenu>
</div>
<div class="col-md-4 form-group">
<p:outputLabel value="Data"/>
<p:inputText value="#{pesquisaBemBean.movimentacao.data}"/>
</div>
<div class="col-md-12 form-group">
<p:outputLabel value="Histórico"/>
<p:inputText value="#{pesquisaBemBean.movimentacao.historico}"/>
</div>
</div>
<p:commandButton value="Salvar" oncomplete="PF('movimentacaoDialogo').hide()"
action="#{pesquisaBemBean.salvarMovimentacao}"
update=":frmMovimentacao"/>
</h:form>
</p:dialog>
我看到错误是通过从数据表中启用行选择而产生的,因为我在数据表选择属性中调用了相同的 Movimentacao 对象。
数据表
<p:dataTable id="movimentacaoTable" var="movimentacao" rows="3" value="#{pesquisaBemBean.listaMovimentacao}"
emptyMessage="Selecione um bem" paginator="true" paginatorPosition="bottom"
selectionMode="single" selection="#{pesquisaBemBean.movimentacao}" rowKey="#{movimentacao.id}">
<p:column headerText="N° tombamento">
<h:outputText value="#{movimentacao.numeroTombamento}"/>
</p:column>
<p:column headerText="Operacao">
<h:outputText value="#{movimentacao.operacao}"/>
</p:column>
</p:dataTable>
我找到的一个解决方案是创建一个 Movimentacao 类型的新变量并在 DataTable 选择中调用它。我想知道这是否是解决方案,或者我是否只能使用相同的变量。
产生错误
INFORMAÇÕES: javax.el.PropertyNotFoundException: /bem/PesquisaBem.xhtml @128,91 value="#{pesquisaBemBean.movimentacao.setor}": Target Unreachable, 'movimentacao' returned null
javax.el.PropertyNotFoundException: /bem/PesquisaBem.xhtml @128,91 value="#{pesquisaBemBean.movimentacao.setor}": Target Unreachable, 'movimentacao' returned null
at com.sun.faces.facelets.el.TagValueExpression.getType(TagValueExpression.java:100)
at org.primefaces.renderkit.SelectRenderer.findImplicitConverter(SelectRenderer.java:199)
at org.primefaces.renderkit.SelectRenderer.getOptionAsString(SelectRenderer.java:185)
at org.primefaces.renderkit.SelectRenderer.doValidateSubmittedValues(SelectRenderer.java:341)
at org.primefaces.renderkit.SelectRenderer.validateSubmittedValues(SelectRenderer.java:310)
at org.primefaces.renderkit.SelectOneRenderer.decode(SelectOneRenderer.java:44)
at org.primefaces.component.selectonemenu.SelectOneMenuRenderer.decode(SelectOneMenuRenderer.java:78)
at javax.faces.component.UIComponentBase.decode(UIComponentBase.java:832)
at javax.faces.component.UIInput.decode(UIInput.java:771)
at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1227)
at javax.faces.component.UIInput.processDecodes(UIInput.java:676)
at javax.faces.component.UIForm.processDecodes(UIForm.java:225)
at com.sun.faces.context.PartialViewContextImpl$PhaseAwareVisitCallback.visit(PartialViewContextImpl.java:573)
at com.sun.faces.component.visit.PartialVisitContext.invokeVisitCallback(PartialVisitContext.java:183)
at javax.faces.component.UIForm.visitTree(UIForm.java:381)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1700)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1700)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1700)
at com.sun.faces.context.PartialViewContextImpl.processComponents(PartialViewContextImpl.java:403)
at com.sun.faces.context.PartialViewContextImpl.processPartial(PartialViewContextImpl.java:266)
at org.primefaces.context.PrimePartialViewContext.processPartial(PrimePartialViewContext.java:63)
at javax.faces.context.PartialViewContextWrapper.processPartial(PartialViewContextWrapper.java:219)
at javax.faces.component.UIViewRoot.processDecodes(UIViewRoot.java:927)
at com.sun.faces.lifecycle.ApplyRequestValuesPhase.execute(ApplyRequestValuesPhase.java:78)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:658)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:94)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:502)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1132)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1533)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1489)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
Caused by: javax.el.PropertyNotFoundException: Target Unreachable, 'movimentacao' returned null
at org.apache.el.parser.AstValue.getTarget(AstValue.java:124)
at org.apache.el.parser.AstValue.getType(AstValue.java:58)
at org.apache.el.ValueExpressionImpl.getType(ValueExpressionImpl.java:168)
at org.jboss.weld.el.WeldValueExpression.getType(WeldValueExpression.java:93)
at com.sun.faces.facelets.el.TagValueExpression.getType(TagValueExpression.java:98)
... 47 more
库版本
Primefaces:7.0
JSF: 2.2.13
您需要在 属性 movimentacao 的 PesquisaBemBean 中有一个 getter/setter:
public Movimentacao getMovimentacao() {
return Movimentacao;
}
public void setMovimentacao(Movimentacao movimentacao) {
this.movimentacao = movimentacao;
}
我找到了解决方案。我在 commandButton 中添加了属性 immediate="true",这会打开我用来注册 Movimentacao 的对话框。另一个解决方案是将 process="@this" 属性也添加到打开对话框的 commandButton。
<p:commandButton id="botao" value="Realizar tombamento" disabled="#{pesquisaBemBean.idBem == null}"
oncomplete="PF('movimentacaoDialogo').show()" styleClass="btn btn-info custom-btn"
immediate="true"
actionListener="#{pesquisaBemBean.novo}"/>
我正在尝试将一个对象保存在数据库中,并尝试将其从这个错误 Target Unreachable 中保存,'Movimentacao' 返回 null,但我正在 MangedBean 中初始化 Movimentacao 对象。
ManagedBean
@Named
@ViewScoped
public class PesquisaBemBean implements Serializable {
private static final long serialVersionUID = 1L;
private Movimentacao movimentacao;
@PostConstruct
public void inicializar(){
this.novo();
}
public void novo(){
this.movimentacao = new Movimentacao();
}
/*remaining code with your get and set*/
}
要保存的 XHTML 代码
<p:dialog id="movimentacaoDialogo" widgetVar="movimentacaoDialogo" closable="true" header="Movimentação"
draggable="false" resizable="false" responsive="true" >
<h:form id="frmMovimentacao">
<div class="row">
<div class="col-md-4 form-group">
<p:outputLabel value="N° tombamento"/>
<p:inputText value="#{pesquisaBemBean.movimentacao.numeroTombamento}"/>
</div>
<div class="col-md-8 form-group">
<p:outputLabel value="Setor:" />
<p:selectOneMenu value="#{pesquisaBemBean.movimentacao.setor}" style="width: 100%">
<f:selectItem itemLabel="Selecione" noSelectionOption="true" />
<f:selectItems var="setor" value="#{pesquisaBemBean.setores}"
itemValue="#{setor}" itemLabel="#{setor.descricao}"/>
</p:selectOneMenu>
</div>
</div>
<div class="row">
<div class="col-md-4 form-group">
<p:outputLabel value="Estado de Concervação"/>
<p:selectOneMenu style="width: 100%" value="#{pesquisaBemBean.movimentacao.estadoConservacao}">
<f:selectItem itemLabel="Selecione" noSelectionOption="true" />
<f:selectItems var="ec" value="#{pesquisaBemBean.estadoConcervacoes}"
itemValue="#{ec}" itemLabel="#{ec.descricao}"/>
</p:selectOneMenu>
</div>
<div class="col-md-4 form-group">
<p:outputLabel value="Data"/>
<p:inputText value="#{pesquisaBemBean.movimentacao.data}"/>
</div>
<div class="col-md-12 form-group">
<p:outputLabel value="Histórico"/>
<p:inputText value="#{pesquisaBemBean.movimentacao.historico}"/>
</div>
</div>
<p:commandButton value="Salvar" oncomplete="PF('movimentacaoDialogo').hide()"
action="#{pesquisaBemBean.salvarMovimentacao}"
update=":frmMovimentacao"/>
</h:form>
</p:dialog>
我看到错误是通过从数据表中启用行选择而产生的,因为我在数据表选择属性中调用了相同的 Movimentacao 对象。
数据表
<p:dataTable id="movimentacaoTable" var="movimentacao" rows="3" value="#{pesquisaBemBean.listaMovimentacao}"
emptyMessage="Selecione um bem" paginator="true" paginatorPosition="bottom"
selectionMode="single" selection="#{pesquisaBemBean.movimentacao}" rowKey="#{movimentacao.id}">
<p:column headerText="N° tombamento">
<h:outputText value="#{movimentacao.numeroTombamento}"/>
</p:column>
<p:column headerText="Operacao">
<h:outputText value="#{movimentacao.operacao}"/>
</p:column>
</p:dataTable>
我找到的一个解决方案是创建一个 Movimentacao 类型的新变量并在 DataTable 选择中调用它。我想知道这是否是解决方案,或者我是否只能使用相同的变量。
产生错误
INFORMAÇÕES: javax.el.PropertyNotFoundException: /bem/PesquisaBem.xhtml @128,91 value="#{pesquisaBemBean.movimentacao.setor}": Target Unreachable, 'movimentacao' returned null
javax.el.PropertyNotFoundException: /bem/PesquisaBem.xhtml @128,91 value="#{pesquisaBemBean.movimentacao.setor}": Target Unreachable, 'movimentacao' returned null
at com.sun.faces.facelets.el.TagValueExpression.getType(TagValueExpression.java:100)
at org.primefaces.renderkit.SelectRenderer.findImplicitConverter(SelectRenderer.java:199)
at org.primefaces.renderkit.SelectRenderer.getOptionAsString(SelectRenderer.java:185)
at org.primefaces.renderkit.SelectRenderer.doValidateSubmittedValues(SelectRenderer.java:341)
at org.primefaces.renderkit.SelectRenderer.validateSubmittedValues(SelectRenderer.java:310)
at org.primefaces.renderkit.SelectOneRenderer.decode(SelectOneRenderer.java:44)
at org.primefaces.component.selectonemenu.SelectOneMenuRenderer.decode(SelectOneMenuRenderer.java:78)
at javax.faces.component.UIComponentBase.decode(UIComponentBase.java:832)
at javax.faces.component.UIInput.decode(UIInput.java:771)
at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1227)
at javax.faces.component.UIInput.processDecodes(UIInput.java:676)
at javax.faces.component.UIForm.processDecodes(UIForm.java:225)
at com.sun.faces.context.PartialViewContextImpl$PhaseAwareVisitCallback.visit(PartialViewContextImpl.java:573)
at com.sun.faces.component.visit.PartialVisitContext.invokeVisitCallback(PartialVisitContext.java:183)
at javax.faces.component.UIForm.visitTree(UIForm.java:381)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1700)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1700)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1700)
at com.sun.faces.context.PartialViewContextImpl.processComponents(PartialViewContextImpl.java:403)
at com.sun.faces.context.PartialViewContextImpl.processPartial(PartialViewContextImpl.java:266)
at org.primefaces.context.PrimePartialViewContext.processPartial(PrimePartialViewContext.java:63)
at javax.faces.context.PartialViewContextWrapper.processPartial(PartialViewContextWrapper.java:219)
at javax.faces.component.UIViewRoot.processDecodes(UIViewRoot.java:927)
at com.sun.faces.lifecycle.ApplyRequestValuesPhase.execute(ApplyRequestValuesPhase.java:78)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:658)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:94)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:502)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1132)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1533)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1489)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
Caused by: javax.el.PropertyNotFoundException: Target Unreachable, 'movimentacao' returned null
at org.apache.el.parser.AstValue.getTarget(AstValue.java:124)
at org.apache.el.parser.AstValue.getType(AstValue.java:58)
at org.apache.el.ValueExpressionImpl.getType(ValueExpressionImpl.java:168)
at org.jboss.weld.el.WeldValueExpression.getType(WeldValueExpression.java:93)
at com.sun.faces.facelets.el.TagValueExpression.getType(TagValueExpression.java:98)
... 47 more
库版本
Primefaces:7.0 JSF: 2.2.13
您需要在 属性 movimentacao 的 PesquisaBemBean 中有一个 getter/setter:
public Movimentacao getMovimentacao() {
return Movimentacao;
}
public void setMovimentacao(Movimentacao movimentacao) {
this.movimentacao = movimentacao;
}
我找到了解决方案。我在 commandButton 中添加了属性 immediate="true",这会打开我用来注册 Movimentacao 的对话框。另一个解决方案是将 process="@this" 属性也添加到打开对话框的 commandButton。
<p:commandButton id="botao" value="Realizar tombamento" disabled="#{pesquisaBemBean.idBem == null}"
oncomplete="PF('movimentacaoDialogo').show()" styleClass="btn btn-info custom-btn"
immediate="true"
actionListener="#{pesquisaBemBean.novo}"/>