Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > ошибка с JSF


Автор: iv_s 8.9.2007, 07:53
немного разобрался с сервлетами и jsp, решил посмотреть jsf
и сразу проблема...

взял пример из туториала, деплою на томкате и открывая index.faces получаю такой эксепшн
Код

java.lang.IllegalArgumentException: Class test.UserBean of managed bean user is not a Map.
    org.apache.myfaces.config.ManagedBeanBuilder.buildManagedBean(ManagedBeanBuilder.java:69)
    org.apache.myfaces.el.VariableResolverImpl.resolveVariable(VariableResolverImpl.java:314)
    org.apache.myfaces.el.ValueBindingImpl$ELVariableResolver.resolveVariable(ValueBindingImpl.java:570)
    org.apache.commons.el.NamedValue.evaluate(NamedValue.java:124)
    org.apache.commons.el.ComplexValue.evaluate(ComplexValue.java:140)
    org.apache.myfaces.el.ValueBindingImpl.getValue(ValueBindingImpl.java:386)
    javax.faces.component.UIOutput.getValue(UIOutput.java:80)
    org.apache.myfaces.shared_impl.renderkit.RendererUtils.getStringValue(RendererUtils.java:223)
    org.apache.myfaces.shared_impl.renderkit.html.HtmlTextRendererBase.renderInput(HtmlTextRendererBase.java:135)
    org.apache.myfaces.shared_impl.renderkit.html.HtmlTextRendererBase.encodeEnd(HtmlTextRendererBase.java:53)
    javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:539)
    javax.faces.webapp.UIComponentTag.encodeEnd(UIComponentTag.java:498)
    javax.faces.webapp.UIComponentTag.doEndTag(UIComponentTag.java:366)
    org.apache.jsp.index_jsp._jspx_meth_h_005finputText_005f0(index_jsp.java:192)
    org.apache.jsp.index_jsp._jspx_meth_h_005fform_005f0(index_jsp.java:149)
    org.apache.jsp.index_jsp._jspx_meth_f_005fview_005f0(index_jsp.java:111)
    org.apache.jsp.index_jsp._jspService(index_jsp.java:73)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:384)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    org.apache.myfaces.context.servlet.ServletExternalContextImpl.dispatch(ServletExternalContextImpl.java:419)
    org.apache.myfaces.application.jsp.JspViewHandlerImpl.renderView(JspViewHandlerImpl.java:211)
    org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:41)
    org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:132)
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:140)


конфиг такой
Код

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE faces-config PUBLIC
  "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
  "http://java.sun.com/dtd/web-facesconfig_1_1.dtd">

<faces-config>
    <managed-bean>
        <managed-bean-name>user</managed-bean-name>
        <managed-bean-class>test.UserBean</managed-bean-class>
        <managed-bean-scope>application</managed-bean-scope>
        <map-entries>
        </map-entries>
    </managed-bean>

    <navigation-rule>
        <from-view-id>/index.jsp</from-view-id>
        <navigation-case>
            <from-outcome>login</from-outcome>
            <to-view-id>/welcome.jsp</to-view-id>
        </navigation-case>
    </navigation-rule>

</faces-config>


index.jsp
Код

<html>
    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
    <f:view>
        <head>
            <title>A Simple JavaServer Faces Application</title>
        </head>
        <body>
            <h:form>
                <h3>Please enter your name and password.</h3>
                <table>
                    <tr>
                        <td>Name:</td>
                        <td>
                            <h:inputText value="#{user.name}"/>
                        </td>
                    </tr>

                    <tr>
                        <td>Password:</td>
                        <td>
                            <h:inputSecret value="#{user.password}"/>
                        </td>
                    </tr>
                </table>
                <p>
                    <h:commandButton value="Login" action="login"/>
                </p>
            </h:form>
        </body>
    </f:view>
</html>


класс test.UserBean
Код

package test;

public class UserBean
{
    String name;
    String password;

    public String getName() {
        return name;
    }

    public void setName(String newValue) {
        name = newValue;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String newValue) {
        password = newValue;
    }
}


ошибка в этой строке
Код

<h:inputText value="#{user.name}"/>


никак не могу понять в чем причина ошибки...
все перепробовал и с myfaces 1.1/1.2 и с сановским jsf 1.1 на томкэте 5.5.20/6.0.10 jdk 1.5.0_07/1.6.0_02
везде один и тот же эксепшн...

даже гугл не помог))

уже три дня мучаюсь, думаю уж забить на jsf и пойти тапестри или еще чегонибудь смотреть))

Автор: Maksym 8.9.2007, 11:18
iv_s
Твой класс UserBean не расширяет никакого Map => разметка <map-entries></map-entries> в описании бина ошибочна. Убери ее.
Этот тег используется для преинициалицации managed bean'a, который является картой, произвольными значениями.

Автор: Aoli 8.9.2007, 11:21
Код

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE faces-config PUBLIC
  "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
  "http://java.sun.com/dtd/web-facesconfig_1_1.dtd">
<faces-config>
    <managed-bean>
        <managed-bean-name>user</managed-bean-name>
        <managed-bean-class>test.UserBean</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
          <managed-property>
   <property-name>name</property-name>
   <property-class>java.lang.String</property-class>
   <value>the name</value>
  </managed-property>
  <managed-property>
   <property-name>password</property-name>
   <property-class>java.lang.String</property-class>
   <value>the password</value>
  </managed-property>
    </managed-bean>
    <navigation-rule>
        <from-view-id>/index.jsp</from-view-id>
        <navigation-case>
            <from-outcome>login</from-outcome>
            <to-view-id>/welcome.jsp</to-view-id>
        </navigation-case>
    </navigation-rule>
</faces-config>

Автор: iv_s 8.9.2007, 11:45
спасибо за ответы!

<map-entries> убрал, и все заработало...
надо было тупо пример скопиривать, а я решил идеевским визардом воспользоваться, вот он и понавставлял чегото))

ну надоже.. на такую мелочь три дня убил, походу визарды и вправду зло  smile 

Автор: Maksym 8.9.2007, 11:46
Цитата(iv_s @  8.9.2007,  11:45 Найти цитируемый пост)
походу визарды и вправду зло

страшное зло, особенно на этапе изучения технологии

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)