2

以下のエラーの修正はありますか。コマンド ボタンをクリックすると、java スクリプトが呼び出され、topic_body、topic_url の値が設定され、コマンド ボタンによってサーバーのメソッドに値が送信されます。エラーを止めるために何を修正する必要があったかわかりません。

XHTML

<h:form prependId="false" id="testForm">
        <h:inputHidden value="#{topicBean.topicVO.body}" id="topic_body">
        </h:inputHidden>
        <h:inputHidden value="#{topicBean.topicVO.videoAudioUrl}" id="topic_vaurl" >
        </h:inputHidden>
        <h:inputHidden value="#{topicBean.topic_guid}" id="topic_guid">
        </h:inputHidden>
                <p:commandButton id="shareeButton" action="#{topicController.createTopic}" onclick="javascript:renderElement();">
                Share
                <f:ajax execute="@form" render="@form"></f:ajax>
                </p:commandButton>
            </h:form>

Javascript

function  renderElement(){
           var textarea_content = $('textarea#wall').val();
           $('#topic_body').val(textarea_content);
           if (textarea_content != '') {
               var sitetitle = $('label.title').html();
               if (sitetitle == null) {
                   sitetitle = ' ';
               }
.......
......
..

}

JSFビーン

@ManagedBean(name = "topicBean")
@SessionScoped
public class TopicBean extends BaseMB implements Serializable {
    /**
     *
     */
    private static final long serialVersionUID = 1L;
    private final static Logger logger = Logger.getLogger(CircleBean.class.toString());
    private TopicVO topicVO = new TopicVO();
    private long topic_guid =0;
    public TopicBean(){
        logger.info("****************************Start TopicBean Constructor****************************************");
        logger.info("****************************End TopicBean Constructor****************************************");

    }

JSF メソッド

@ManagedBean(name = "topicController")
@RequestScoped
public class TopicController  extends BaseMB implements Serializable {

    /**
     *
     */
    private static final long serialVersionUID = 1L;
    private final static Logger logger = Logger
            .getLogger(CircleController.class.toString());
    TopicBean topicBean;


    public void createTopic(){
        logger.info("*******************Inside creatTopic********************");
        topicBean = (TopicBean) FacesUtils.getManagedBean("topicBean");
        ITopicService topicService = (ITopicService) ServiceLocator
                .getService("TOPICSERVICE");
         topicBean.setTopic_guid(topicService.createTopic(topicBean.getTopicVO(), userSession));

        logger.info("*******************Inside creatTopic********************");
    }

エラー

14:44:20,335 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/emyed-web].[Faces Servlet]] (http--127.0.0.1-8080-3) Servlet.service() for servlet Faces Servlet threw exception: java.lang.NullPointerException
    at com.sun.faces.mgbean.BeanManager$ScopeManager$SessionScopeHandler.handle(BeanManager.java:575) [jsf-impl-2.1.7-jbossorg-2.jar:]
    at com.sun.faces.mgbean.BeanManager$ScopeManager.pushToScope(BeanManager.java:458) [jsf-impl-2.1.7-jbossorg-2.jar:]
    at com.sun.faces.mgbean.BeanManager.createAndPush(BeanManager.java:410) [jsf-impl-2.1.7-jbossorg-2.jar:]
    at com.sun.faces.mgbean.BeanManager.create(BeanManager.java:269) [jsf-impl-2.1.7-jbossorg-2.jar:]
    at com.sun.faces.el.ManagedBeanELResolver.resolveBean(ManagedBeanELResolver.java:244) [jsf-impl-2.1.7-jbossorg-2.jar:]
    at com.sun.faces.el.ManagedBeanELResolver.getValue(ManagedBeanELResolver.java:116) [jsf-impl-2.1.7-jbossorg-2.jar:]
    at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176) [jsf-impl-2.1.7-jbossorg-2.jar:]
    at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203) [jsf-impl-2.1.7-jbossorg-2.jar:]
    at com.zreflect.emyed.filter.EmyEdAccessFilter.hasLoggedIn(EmyEdAccessFilter.java:113) [emyed-ui-1.0.jar:]
    at com.zreflect.emyed.filter.EmyEdAccessFilter.doFilter(EmyEdAccessFilter.java:84) [emyed-ui-1.0.jar:]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) [jbossweb-7.0.13.Final.jar:]
    at org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:50) [jboss-as-jpa-7.1.1.Final.jar:7.1.1.Final]
    at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final]
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368) [jbossweb-7.0.13.Final.jar:]
    at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:897) [jbossweb-7.0.13.Final.jar:]
    at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:626) [jbossweb-7.0.13.Final.jar:]
    at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:2039) [jbossweb-7.0.13.Final.jar:]
    at java.lang.Thread.run(Thread.java:662) [rt.jar:1.6.0_25]



enter code here
4

2 に答える 2

4

スタックトレースによると、

java.lang.NullPointerException
    at com.sun.faces.mgbean.BeanManager$ScopeManager$SessionScopeHandler.handle(BeanManager.java:575) [jsf-impl-2.1.7-jbossorg-2.jar:]
    at com.sun.faces.mgbean.BeanManager$ScopeManager.pushToScope(BeanManager.java:458) [jsf-impl-2.1.7-jbossorg-2.jar:]
    at com.sun.faces.mgbean.BeanManager.createAndPush(BeanManager.java:410) [jsf-impl-2.1.7-jbossorg-2.jar:]
    at com.sun.faces.mgbean.BeanManager.create(BeanManager.java:269) [jsf-impl-2.1.7-jbossorg-2.jar:]
    at com.sun.faces.el.ManagedBeanELResolver.resolveBean(ManagedBeanELResolver.java:244) [jsf-impl-2.1.7-jbossorg-2.jar:]
    at com.sun.faces.el.ManagedBeanELResolver.getValue(ManagedBeanELResolver.java:116) [jsf-impl-2.1.7-jbossorg-2.jar:]
    at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176) [jsf-impl-2.1.7-jbossorg-2.jar:]
    at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203) [jsf-impl-2.1.7-jbossorg-2.jar:]
    at com.zreflect.emyed.filter.EmyEdAccessFilter.hasLoggedIn(EmyEdAccessFilter.java:113) [emyed-ui-1.0.jar:]
    at com.zreflect.emyed.filter.EmyEdAccessFilter.doFilter(EmyEdAccessFilter.java:84) [emyed-ui-1.0.jar:]

を使用して JSF 固有の EL 式を解決しようとしているFilterクラスがあります。おそらく、セッション スコープの JSF マネージド Bean またはログイン ユーザーを表すそのプロパティを見つけることのみを目的としています。しかし、この EL 解決は、サーブレット フィルター内に手段がないため失敗しました。はによって作成されるはずですが、フィルタが実行された時点ではがまったく実行されていないため、が返され、コードが壊れます。EmyEdAccessFilterValueExpressionFacesContextFacesContextFacesServletFacesServletFacesContext.getCurrentInstance()null

結局のところ、これはフィルターでセッション スコープの JSF マネージド Bean をチェックする正しい方法ではありません。

JSF の内部では、セッション スコープのマネージド Bean はHttpSession、マネージド Bean 名をセッション属性名として の属性として格納されます。サーブレットフィルターのセッション属性として「通常の方法」でアクセスできます。例えば

@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
    HttpServletRequest request = (HttpServletRequest) req;
    HttpServletResponse response = (HttpServletResponse) res;
    HttpSession session = request.getSession(false);
    UserManager userManager = (session != null) ? (UserManager) session.getAttribute("userManager") : null;

    if (userManager == null || !userManager.isLoggedIn()) {
        response.sendRedirect(request.getContextPath() + "/login.xhtml"); // No logged-in user found, so redirect to login page.
    } else {
        chain.doFilter(req, res); // Logged-in user found, so just continue request.
    }
}

UserManagerは、セッション スコープの JSF マネージド Bean を表します。

以下も参照してください。

于 2012-08-27T19:41:39.440 に答える
0

@ManagedProperty が正しいことも確認してください。例えば:

@ManagedProperty(value = "#{user_ejb}")
UserEJB userEJB;

または @Inject

于 2015-02-03T21:38:11.557 に答える