ajax – java.lang.IllegalStateException:CDATA标签可能不嵌套
我在JSF页面中有一个ajax请求的问题。当我点击按钮,我得到这个例外:
SEVERE: Servlet.service() for servlet Faces Servlet threw exception java.lang.IllegalStateException: CDATA tags may not nest at com.sun.faces.renderkit.html_basic.HtmlResponseWriter.startCDATA(HtmlResponseWriter.java:630) at javax.faces.context.ResponseWriterWrapper.startCDATA(ResponseWriterWrapper.java:172) at javax.faces.context.PartialResponseWriter.startError(PartialResponseWriter.java:342) at org.primefaces.context.PrimePartialResponseWriter.startError(PrimePartialResponseWriter.java:210) at com.sun.faces.context.AjaxExceptionHandlerImpl.handlePartialResponseError(AjaxExceptionHandlerImpl.java:200) at com.sun.faces.context.AjaxExceptionHandlerImpl.handle(AjaxExceptionHandlerImpl.java:123) at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:119) at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139) 我认为这是String对象的一些问题,因为当我硬编码站点上显示的JPA实体属性时,一切都OK。然而,当从数据库(PostgreSQL)中检索实体时,它会引发上述异常。 JSF代码: <p:column> <f:facet name="header"> Akcja </f:facet> <h:commandButton actionListener="#{mBDocumentMigration.actionEdit(object)}" value="Edytuj" rendered="#{mBDocumentMigration.editingObject == null}" > <f:ajax render="@form" execute="@form" /> </h:commandButton> <h:commandButton action="#{mBDocumentMigration.actionZapisz}" value="Zapisz" rendered="#{mBDocumentMigration.editingObject != null}" > <f:ajax render="@form" execute="@this" /> </h:commandButton> </p:column>
在渲染由代码中的错误引起的JSF响应时抛出异常。但是,Mojarra无法使用内置的ajax异常处理程序正确处理此异常,导致您现在看到的另一个异常,隐藏了有关原始异常的所有细节。
仔细看堆栈跟踪。从底部开始跟踪调用堆栈: at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139) 因此,它在渲染响应阶段发生。好的,看下一行(上面一行): at com.sun.faces.context.AjaxExceptionHandlerImpl.handle(AjaxExceptionHandlerImpl.java:123) 嘿,它已经通过Mojarra的内置的ajax异常处理程序AjaxExceptionHandlerImpl!仅在ajax请求期间发生异常时才调用此方法。好的,从下到上阅读下一行: at com.sun.faces.renderkit.html_basic.HtmlResponseWriter.startCDATA(HtmlResponseWriter.java:630) at javax.faces.context.ResponseWriterWrapper.startCDATA(ResponseWriterWrapper.java:172) at javax.faces.context.PartialResponseWriter.startError(PartialResponseWriter.java:342) at org.primefaces.context.PrimePartialResponseWriter.startError(PrimePartialResponseWriter.java:210) at com.sun.faces.context.AjaxExceptionHandlerImpl.handlePartialResponseError(AjaxExceptionHandlerImpl.java:200) 因此,尝试将错误信息写入ajax响应。此信息必须在CDATA块中。然而,启动CDATA块失败如下,因为显然已经有一个CDATA块打开了: java.lang.IllegalStateException: CDATA tags may not nest 这又表示在编写ajax响应时发生异常,很可能是因为您在生成HTML输出时仅调用getter方法执行业务逻辑。所以这个过程最有可能如下: > JSF进入RENDER_RESPONSE阶段。 你可以看到,问题是双重的: > JSF渲染器不应该让响应halfbaked。 如果您用custom one which immediately prints the stack trace或OmniFaces (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 浅谈软件重构
- ruby-on-rails – 首先区别!和Rails中的第一个方法
- XmlDocument.Load XML文件时出现“给定的编码字符无效”异常
- 在Oracle SQL中,我可以查询表的分区而不是整个表来使其运行
- 正则表达式 c++
- postgresql – 在mac os中找不到PostGIS扩展(安装在不同的目
- c# – System.Web.HttpException:不能在DropDownList中选择
- winforms – 如何确定要包含的“Oracle.DataAccess.dll”版
- 解决SQLite3 not found
- 在Flash Builder 4.7的纯AS项目中使用Flex SDK