本篇文章给大家谈谈java.lang.IllegalStateException:组件javax.faces.component.UIViewRoot不是预期的类型,同时本文还将给你拓展ajax–ja
本篇文章给大家谈谈java.lang.IllegalStateException:组件javax.faces.component.UIViewRoot不是预期的类型,同时本文还将给你拓展ajax – java.lang.IllegalStateException:CDATA标签可能不嵌套、android java.lang.IllegalStateException: System services not available to Activities before onCreate、Android json错误com.google.gson.JsonSyntaxException:java.lang.IllegalStateException、android – EXCEPTION DETAILS:java.lang.IllegalStateException:进程3188超出游标配额100,将使用Rom MIUI终止它等相关知识,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:- java.lang.IllegalStateException:组件javax.faces.component.UIViewRoot不是预期的类型
- ajax – java.lang.IllegalStateException:CDATA标签可能不嵌套
- android java.lang.IllegalStateException: System services not available to Activities before onCreate
- Android json错误com.google.gson.JsonSyntaxException:java.lang.IllegalStateException
- android – EXCEPTION DETAILS:java.lang.IllegalStateException:进程3188超出游标配额100,将使用Rom MIUI终止它
java.lang.IllegalStateException:组件javax.faces.component.UIViewRoot不是预期的类型
我有一个包含JSF组件的JSP文件index.jsp
:
<body> <h:form prependId="false"> <h:panelGrid id="panelLogin" columnClasses="colLabel,colValor" columns="2"> <f:facet name="header"> <h:outputText value="Panel de Log-In" /> </f:facet> <h:outputLabel value="Usuario" for="txtNombre" /> <h:inputText id="txtNombre" value="#{manejadorLogin.usuario}" /> <h:outputLabel value="Password" for="txtPassword" /> <h:inputText id="txtPassword" value="#{manejadorLogin.password}" /> <f:facet name="footer"> <h:panelGrid columns="2"> <h:commandButton value="Login" action="#{manejadorLogin.loginUsuario}" /> <h:commandButton value="Limpiar" type="reset" /> </h:panelGrid> </f:facet> </h:panelGrid> </h:form> </body>
当我按下“登录”按钮时,出现此错误:
发生错误:java.lang.IllegalStateException:组件javax.faces.component.UIViewRoot@7cf94d3b不是预期的类型。预期:javax.faces.component.UIOutput。也许您缺少标签?
这是怎么引起的,我该如何解决?
答案1
小编典典发生错误:java.lang.IllegalStateException:组件javax.faces.component.UIViewRoot@7cf94d3b不是预期的类型。预期:javax.faces.component.UIOutput。也许您缺少标签?
该<f:view>
操作导航到的JSP文件中缺少该标记。如果您使用遗留的JSP作为视图技术而不是其后继的Facelets,则需要确保所有JSF组件都包含在父<f:view>
标记内(该父标记位于由UIViewRoot
组件表示的幕后)。
您需要更改JSP文件以匹配以下基本模板(请注意<f:view>
):
<%@page contentType="text/html" pageEncoding="UTF-8"%><%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%><%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%><!DOCTYPE html><f:view> <html lang="en"> <head> <title>JSP page with JSF components</title> </head> <body> <h:outputText value="JSF components here." /> </body> </html></f:view>
ajax – java.lang.IllegalStateException:CDATA标签可能不嵌套
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>
仔细看堆栈跟踪。从底部开始跟踪调用堆栈:
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需要生成HTML输出。
>对于每个< f:ajax render =“some”> (或< p:ajax update =“some”>)),则需要创建< update id =“some”>在CDATA block之间生成的HTML输出的XML块(以保持XML输出在语法上有效)。所以需要启动一个CDATA块。
>将HTML输出生成到CDATA块中时,会对所有渲染时EL表达式进行求值,包括所有UI组件的value属性。
>在某个地方,EL表达式后面的getter会抛出一个由你自己的代码中的错误引起的异常。
> JSF会立即停止生成HTML输出,并没有关闭CDATA块。 HTTP响应包含半记录数据。
> AjaxExceptionHandlerImpl被触发。
> AjaxExceptionHandlerImpl需要将异常/错误详细信息写入响应。但是,它没有检查响应是否已经被写入。它盲目地尝试打开一个CDATA块,由此它已经被打开了。它抛出了你看到的异常,隐藏了所有关于它试图处理的真正的底层异常的细节。
你可以看到,问题是双重的:
> JSF渲染器不应该让响应halfbaked。
> Mojarra的AjaxExceptionHandlerImpl应该已经检查/验证了响应的状态。
如果您用custom one which immediately prints the stack trace或OmniFaces FullAjaxExceptionHandler
which is capable of detecting and cleaning halfbaked ajax responses替换Mojarra的内置ajax异常处理程序,那么最终会显示和显示代码中的错误引起的真正原因。如前所述,这很可能是performing business logic in a getter method,which is a bad practice造成的。
android java.lang.IllegalStateException: System services not available to Activities before onCreate
java.lang.IllegalStateException: System services not available to Activities before onCreate()出现这种情况一般是因为 通过使用new关键字实例化Activity类,这样是错误的。因为Activity是系统通过ActivityManagerService创建管理的。 new之后,创建了对象,但没有创建这个Activity,要知道Activity的对象和在Android中真正表示的东西,不是一样的。 对象创建完成后,需要系统对其进行一系列的init和管理。在这个创建的过程中,会回调Acitivity中的onCreate方法,这个方法调用之后,才能说明Activity是创建完成了。
所以就不能使用new关键字实例化Activity对象,要通过startActivity的方式,实例化这个Activity对象。
原文链接: http://blog.csdn.net/centralperk/article/details/7496877
Android json错误com.google.gson.JsonSyntaxException:java.lang.IllegalStateException
我在解析json数据时遇到此错误
Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2
我无法找到解决方案.我的json数据是:
{
"user": [
{
"email": "wijden@jerseyrest.com",
"firstName": "Wijden",
"id": "1",
"lastName": "User"
}, {
"email": "user@jerseyrest.com",
"firstName": "Sample",
"id": "2",
"lastName": "User"
}, {
"email": "ingenieur@jerseyrest.com",
"firstName": "Ingenieur",
"id": "3",
"lastName": "User"
}
]
}
这就是我做到的方式:
Type type = new Typetoken<List<WorkItem>>() { }.getType();
List<WorkItem> workitems = (List<WorkItem>) new Gson().fromJson(resultat, type);
如果你能帮助我解决问题,我将不胜感激.提前致谢
解决方法:
为了解析你的JSON,我创建了包装响应的类,即:
public class Response {
@Serializedname("user")
private List<User> userList;
//getters and setters
}
和,
public class User{
@Serializedname("id")
private int id;
@Serializedname("email")
private String email;
@Serializedname("firstName")
private String firstName;
@Serializedname("lastName")
private String lastName;
//getters and setters
}
然后,为了解析您的JSON响应,您只需要:
Gson gson = new Gson();
Response data = gson.fromJson(yourjsonString, Response.class);
然后,您可以非常轻松地访问您的数据,例如:
User user = data.getUserList.get(i);
注意:使用注释@Serializedname对于分离JSON响应中和应用程序中的字段名称很有意义,以便遵循Java命名约定…
android – EXCEPTION DETAILS:java.lang.IllegalStateException:进程3188超出游标配额100,将使用Rom MIUI终止它
我使用此代码在Sdcard上加载缩略图,设备工作良好,但设备使用ROM Miui然后它有问题
“例外细节:
java.lang.IllegalStateException:进程3188超出游标配额100,将其杀死“
请帮我修理一下,谢谢.
public static Bitmap getThumbnailByPath(ContentResolver cr, String path)
throws Exception {
String[] projection = { MediaStore.Images.Media._ID };
Cursor cursor = cr.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
projection, MediaStore.Images.Media.DATA + "=?",
new String[] { path }, null);
if (cursor != null && cursor.movetoFirst()) {
long id = cursor.getLong(0);
return getThumbnailById(cr, id);
} else
cursor.close();
return null;
}
public static Bitmap getThumbnailById(ContentResolver cr, long idPhoto)
throws Exception {
return MediaStore.Images.Thumbnails.getThumbnail(cr, idPhoto,
MediaStore.Images.Thumbnails.MINI_KIND, options);
}
解决方法:
您必须始终关闭游标.
使用这样的东西:
Cursor cursor = ...;
try {
if (cursor.movetoFirst())
return getThumbnailById(cr, cursor.getLong(0));
else
return null;
} finally {
cursor.close();
}
关于java.lang.IllegalStateException:组件javax.faces.component.UIViewRoot不是预期的类型的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于ajax – java.lang.IllegalStateException:CDATA标签可能不嵌套、android java.lang.IllegalStateException: System services not available to Activities before onCreate、Android json错误com.google.gson.JsonSyntaxException:java.lang.IllegalStateException、android – EXCEPTION DETAILS:java.lang.IllegalStateException:进程3188超出游标配额100,将使用Rom MIUI终止它等相关知识的信息别忘了在本站进行查找喔。
本文标签: