1

我有一个 JSF 应用程序,我在其中使用 JSF h:inputText 来接受用户数据。我使用托管 bean 将输入字段绑定到 java 对象,这很正常。

使用顺序 ajax 调用定期保存在 HTML 表单中输入的数据。有时定期保存失败,在查找映射对象到输入字段时出错(错误消息说它找不到 java 对象)。尽管应用程序中没有任何更改,但下一次保存数据的调用可能不会发生这种情况。我无法弄清楚重现此错误的模式。当我尝试调试打印对象值时,它也可以正常工作。在输入值映射中,我有嵌套的对象,我怀疑这些对象可能与错误有关。

这是 JSF 页面中的代码片段。

<c:forEach var="doc"
            items="#{trim.trim.act.relationship['patientSurgeons'].act.relationshipsList['physician']}"
            varStatus="physicianIndex">
            <table>
                <tr>

                    <td><h:inputText
                            id="firstName#{physicianIndex.index}" placeholder="first name"
                            value="#{doc.act.participation['surgeon'].role.player.name.EN['L'].parts[0].ST.value}"
                            class="sidebyside small" />
                        </td>

这是异常堆栈跟踪的方式

15:52:55,239 错误 [[Faces Servlet]] Servlet.service() for servlet Faces Servlet 抛出异常 javax.el.PropertyNotFoundException: /META-INF/tags/wizard/inputTextWithPlaceholder.xhtml @15,86 value="#{ value}": /wizard/questionnaireWiz/patientPhysicians.xhtml @73,36 value="#{doc.act.participation['surgeon'].role.player.name.EN['L'].parts[0]。 ST.value}":目标无法到达,标识符 'doc' 在 com.sun.facelets.el.TagValueExpression.getType(TagValueExpression.java:62) 在 com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getConvertedValue( HtmlBasicInputRenderer.java:81) 在 javax.faces.component.UIInput.getConvertedValue(UIInput.java:934) 在 javax.faces.component.UIInput.validate(UIInput.java:860) 在 javax.faces.component.UIInput.executeValidate (用户界面输入。java:1065) 在 javax.faces.component.UIInput.processValidators(UIInput.java:666) 在 javax.faces.component.UIForm.processValidators(UIForm.java:229) 在 javax.faces.component.UIComponentBase.processValidators(UIComponentBase .java:1033) 在 javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:662) 在 com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:100) 在 com.sun.faces.lifecycle。 LifecycleImpl.phase(LifecycleImpl.java:251) at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)UIComponentBase.processValidators(UIComponentBase.java:1033) 在 javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:662) 在 com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:100) 在 com.sun .faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251) at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:244 )UIComponentBase.processValidators(UIComponentBase.java:1033) 在 javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:662) 在 com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:100) 在 com.sun .faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251) at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:244 )117) 在 javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)117) 在 javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)

我在这里能错过什么?

4

1 回答 1

0

<c:forEach items>当后面的值在回发请求的流程验证阶段不可用时,此构造将失败,因此#{doc}评估为null. 例如,因为#{trim}是一个请求范围的 bean,其数据通过<f:viewParam>. 使其成为视图范围的 bean(如果您使用 Mojarra,请确保您至少使用 2.1.18),应该修复它。

于 2013-09-30T09:55:31.847 回答