GVKun编程网logo

java.lang.IllegalStateException:组件javax.faces.component.UIViewRoot不是预期的类型

16

本篇文章给大家谈谈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不是预期的类型

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标签可能不嵌套

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需要生成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

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

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终止它

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终止它等相关知识的信息别忘了在本站进行查找喔。

本文标签: