【问题标题】:JSF fails to evaluate Java objects mapped to input fieldsJSF 无法评估映射到输入字段的 Java 对象
【发布时间】:2013-09-27 20:40:36
【问题描述】:

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

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

这是JSF页面中的代码sn-p。

<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' 解析为 null 在 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(UIInput.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) 在 com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117) 在 javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)

我会在这里遗漏什么?

【问题讨论】:

  • 看起来您正试图访问一个列表或数组(parts[0])。您确定该列表确实包含索引零的值吗?

标签: jsf jstl


【解决方案1】:

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

【讨论】:

  • 很遗憾,我们正在使用带有 facelets 的 JSF1.x。我无法升级到 2.0 才能使用视图范围。您对备用错误修复有任何其他建议吗?谢谢BalusC
猜你喜欢
  • 2020-04-14
  • 2017-01-17
  • 1970-01-01
  • 2018-03-06
  • 1970-01-01
  • 1970-01-01
  • 2016-12-04
  • 2021-11-19
  • 1970-01-01
相关资源
最近更新 更多