nullpoInterpection @managedBean在Maven中

发布于 2025-01-22 05:59:22 字数 10639 浏览 2 评论 0原文

我的Labeldetailbean和Labelbean就像我的Maven项目一样。

package com.alper.bean.detail;

import com.alper.db.LabelOperations;
import com.alper.model.menu.Label;
import com.alper.util.CustomMessage;
import lombok.Getter;
import lombok.Setter;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.inject.Named;
import java.util.List;

@ManagedBean
@ViewScoped
@Named
@Getter
@Setter
public class LabelDetailBean {
    private List<Label> labels;
    private Label label;
    private LabelOperations labelOperations;

    public LabelDetailBean() {
        label = new Label();
        labelOperations = new LabelOperations();
    }

    @PostConstruct
    public void init() {
        setLabels(labelOperations.listLabels());
    }

    public String saveLabel() {
        // insertion check for label
        boolean check = labelOperations.insertLabel(getLabel());
        if (check) {
            CustomMessage.addMessageInfo("Onaylandı", "Kullanıcı başarıyla eklendi");
            setLabels(labelOperations.listLabels());
        }else {
            CustomMessage.addMessageError("Başarısız", "Ekleme işlemi başarısız oldu. Girdiğiniz kullanıcı adı veya e-posta daha önceden alınmış.");
        }
        return "/label-islemleri/index.xhtml";
    }

    public String deleteLabel(Label label){
        long deletingLabelID = label.getLabelID();
        if(labelOperations.deleteLabel(deletingLabelID)) {
            setLabels(labelOperations.listLabels());
            CustomMessage.addMessageInfo("Onaylandı", "Label başarıyla silindi.");
        }else {
            CustomMessage.addMessageError("Başarısız", "Silme işlemi başarısız oldu.");
        }
        return "/label-islemleri/index.xhtml?faces-redirect=true";
    }
}

package com.alper.db;

import com.alper.model.menu.Label;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

public class LabelOperations extends DBConnection {

    public List<Label> listLabels() {
        List<Label> labelList = new ArrayList<>();

        try (Connection connection = getConnection()){
            try(PreparedStatement preparedStatement = connection.prepareStatement(
                    "select * from labels")) {
                preparedStatement.executeQuery();
                try(ResultSet resultSet = preparedStatement.getResultSet()) {
                    while (resultSet.next()) {
                        Label label = new Label();
                        // label infos

                        label.setLabelID(resultSet.getLong(1));
                        label.setLabelname(resultSet.getString(2));
                        // adding label
                        labelList.add(label);
                    }
                }
            }
        } catch (Throwable e) {
            e.printStackTrace();
            e.getMessage();
        }
        return labelList;
    }

    public Boolean validateLabel(Label label){
        return label.getLabelname().length() > 0;
    }

    public Boolean insertLabel(Label label) {
        if(validateLabel(label)) {
            try (Connection connection = getConnection()) {
                try (PreparedStatement preparedStatement = connection.prepareStatement(
                        "insert into label (label) values (?)")) {

                    preparedStatement.setString(1, label.getLabelname());
                    preparedStatement.executeUpdate();
                    return true;
                }
            } catch (Throwable e) {
                e.printStackTrace();
                e.getMessage();
            }
        }
        return false;
    }

    public Boolean deleteLabel(long deletingLabelID) {
        try (Connection connection = getConnection()){
            try(PreparedStatement preparedStatement = connection.prepareStatement(
                    "delete from labels where label_id = ?")) {
                preparedStatement.setLong(1, deletingLabelID);
                preparedStatement.executeUpdate();
                return true;
            }
        } catch (Throwable e) {
            e.printStackTrace();
            e.getMessage();
        }
        return false;
    }
}

<ui:composition
        xmlns="http://www.w3.org/1999/xhtml"
        xmlns:h="http://java.sun.com/jsf/html"
        xmlns:ui="http://java.sun.com/jsf/facelets"
        xmlns:p="http://primefaces.org/ui"
        template="../WEB-INF/template/template.xhtml">

  <ui:param name="pageTitle" value="Label İşlemleri" />
  <ui:param name="pageDescription" value="Label ekleme, güncelleme, silme işlemlerini yapabilirsiniz." />

  <ui:define name="breadcrumb">
    <ol class="breadcrumb">
      <li>
        <h:outputLink value="/">
          <i class="fa fa-home" />
          Anasayfa
        </h:outputLink>
      </li>
      <li>
        <h:outputLink value="/kullanici-islemleri/index.xhtml">
          <i class="fa fa-user" />
          Kullanıcı İşlemleri
        </h:outputLink>
      </li>
      <li>
        <h:outputLink value="/fotograf-islemleri/index.xhtml">
          <i class="fa fa-cube" />
          Fotoğraf İşlemleri
        </h:outputLink>
      </li>
      <li class="active">
        Label İşlemleri
      </li>
    </ol>
  </ui:define>

  <ui:define name="content">
    <div class="row">
      <div class="col-md-12">
        <div class="box box-primary">

          <h:form id="labelForm">

            <div class="box-header with-border">
              <h3 class="box-title">Tüm Labelların Listesi</h3>
            </div>

            <div class="box-body">

              <div class="ui-sm-12 ui-g-12 ui-g-nopad">
                <div class="ui-sm-12 ui-g-6 ui-g-nopad">
                  <div class="ui-sm-12 ui-g-11">
                    <p:outputLabel for="ad" value="Label Adı *" />
                  </div>
                  <div class="ui-sm-12 ui-g-11" >
                    <p:inputText id="ad" value="#{labelBean.label.labelname}" required="true" requiredMessage="Label Adı Giriniz." />
                    <span class="help-block">
                                                <p:message for="ad" />
                                            </span>
                  </div>
                </div>
              </div>

              <div class="box-tools">
                <p:commandButton action="#{labelDetailBean.saveLabel()}"
                                 value="Ekle" immediate="true" styleClass="btn btn-sm btn-success" icon="fa fa-plus" ajax="false" />
              </div>

              <p:dataTable var="label" value="#{labelDetailBean.labels}"
                           id="labelTable" tableStyleClass="table-hover" first="0" rows="20"
                           paginator="true" paginatorPosition="bottom"
                           emptyMessage="Eklenmiş Label Bulunamadı!">

                <p:column headerText="Fotoğraf ID" sortBy="#{label.labelID}">
                  <h:outputText value="#{label.labelID}" />
                </p:column>
                <p:column headerText="Ekleyeceğiniz Label" sortBy="#{label.labelname}">
                  <h:outputText value="#{label.labelname}" />
                </p:column>

                <p:column headerText="İşlem">

                  <!--<p:commandButton action="#{labelDetailBean.updateLabel(label)}" value="Güncelle" styleClass="btn btn-sm btn-primary" icon="fa fa-edit" ajax="false"/>
                  -->
                  <p:growl id="message" showDetail="true"/>
                  <p:commandButton value="Sil" update="message" action="#{labelDetailBean.deleteLabel(label)}" styleClass="btn btn-sm btn-danger" icon="fa fa-remove">
                    <p:confirm header="Onaylama" message="Labeli silmek istediğinize emin misiniz?" icon="pi pi-info-circle"/>
                  </p:commandButton>


                </p:column>
              </p:dataTable>

            </div>

          </h:form>

        </div>
      </div>
    </div>

  </ui:define>

</ui:composition>

在我的XHTML文件中,我使用InputText来填充LabelBeanDetail.label.labelname变量,然后使用Savelabel()函数将此信息发送到InsertLabel()SQL查询函数以添加到数据库中。但是,我面对

[ {errorDetails, #{labelDetailBean.saveLabel()}: java.lang.NullPointerException} ] 

我缺少什么?我试图解决这个问题很长时间,我尝试了不同的事情,没有任何改变。

经过乔纳森·S·费舍尔(Jonathan S. Fisher)的建议,我将printstacktrace版本添加到我的代码中:

javax.faces.FacesException: #{labelDetailBean.saveLabel()}: java.lang.NullPointerException at
com.sun.faces.lifecycle.ApplyRequestValuesPhase.execute(ApplyRequestValuesPhase.java:86) at
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) at
com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198) at
javax.faces.webapp.FacesServlet.service(FacesServlet.java:658)<br/> at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230)<br/> at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)<br/> at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:111)<br/> at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)<br/> at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)<br/> at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) at
com.alper.filter.SessionFilter.doFilter(SessionFilter.java:40) at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)```

My LabelDetailBean and LabelBean are like that in my Maven project.

package com.alper.bean.detail;

import com.alper.db.LabelOperations;
import com.alper.model.menu.Label;
import com.alper.util.CustomMessage;
import lombok.Getter;
import lombok.Setter;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.inject.Named;
import java.util.List;

@ManagedBean
@ViewScoped
@Named
@Getter
@Setter
public class LabelDetailBean {
    private List<Label> labels;
    private Label label;
    private LabelOperations labelOperations;

    public LabelDetailBean() {
        label = new Label();
        labelOperations = new LabelOperations();
    }

    @PostConstruct
    public void init() {
        setLabels(labelOperations.listLabels());
    }

    public String saveLabel() {
        // insertion check for label
        boolean check = labelOperations.insertLabel(getLabel());
        if (check) {
            CustomMessage.addMessageInfo("Onaylandı", "Kullanıcı başarıyla eklendi");
            setLabels(labelOperations.listLabels());
        }else {
            CustomMessage.addMessageError("Başarısız", "Ekleme işlemi başarısız oldu. Girdiğiniz kullanıcı adı veya e-posta daha önceden alınmış.");
        }
        return "/label-islemleri/index.xhtml";
    }

    public String deleteLabel(Label label){
        long deletingLabelID = label.getLabelID();
        if(labelOperations.deleteLabel(deletingLabelID)) {
            setLabels(labelOperations.listLabels());
            CustomMessage.addMessageInfo("Onaylandı", "Label başarıyla silindi.");
        }else {
            CustomMessage.addMessageError("Başarısız", "Silme işlemi başarısız oldu.");
        }
        return "/label-islemleri/index.xhtml?faces-redirect=true";
    }
}

package com.alper.db;

import com.alper.model.menu.Label;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

public class LabelOperations extends DBConnection {

    public List<Label> listLabels() {
        List<Label> labelList = new ArrayList<>();

        try (Connection connection = getConnection()){
            try(PreparedStatement preparedStatement = connection.prepareStatement(
                    "select * from labels")) {
                preparedStatement.executeQuery();
                try(ResultSet resultSet = preparedStatement.getResultSet()) {
                    while (resultSet.next()) {
                        Label label = new Label();
                        // label infos

                        label.setLabelID(resultSet.getLong(1));
                        label.setLabelname(resultSet.getString(2));
                        // adding label
                        labelList.add(label);
                    }
                }
            }
        } catch (Throwable e) {
            e.printStackTrace();
            e.getMessage();
        }
        return labelList;
    }

    public Boolean validateLabel(Label label){
        return label.getLabelname().length() > 0;
    }

    public Boolean insertLabel(Label label) {
        if(validateLabel(label)) {
            try (Connection connection = getConnection()) {
                try (PreparedStatement preparedStatement = connection.prepareStatement(
                        "insert into label (label) values (?)")) {

                    preparedStatement.setString(1, label.getLabelname());
                    preparedStatement.executeUpdate();
                    return true;
                }
            } catch (Throwable e) {
                e.printStackTrace();
                e.getMessage();
            }
        }
        return false;
    }

    public Boolean deleteLabel(long deletingLabelID) {
        try (Connection connection = getConnection()){
            try(PreparedStatement preparedStatement = connection.prepareStatement(
                    "delete from labels where label_id = ?")) {
                preparedStatement.setLong(1, deletingLabelID);
                preparedStatement.executeUpdate();
                return true;
            }
        } catch (Throwable e) {
            e.printStackTrace();
            e.getMessage();
        }
        return false;
    }
}

<ui:composition
        xmlns="http://www.w3.org/1999/xhtml"
        xmlns:h="http://java.sun.com/jsf/html"
        xmlns:ui="http://java.sun.com/jsf/facelets"
        xmlns:p="http://primefaces.org/ui"
        template="../WEB-INF/template/template.xhtml">

  <ui:param name="pageTitle" value="Label İşlemleri" />
  <ui:param name="pageDescription" value="Label ekleme, güncelleme, silme işlemlerini yapabilirsiniz." />

  <ui:define name="breadcrumb">
    <ol class="breadcrumb">
      <li>
        <h:outputLink value="/">
          <i class="fa fa-home" />
          Anasayfa
        </h:outputLink>
      </li>
      <li>
        <h:outputLink value="/kullanici-islemleri/index.xhtml">
          <i class="fa fa-user" />
          Kullanıcı İşlemleri
        </h:outputLink>
      </li>
      <li>
        <h:outputLink value="/fotograf-islemleri/index.xhtml">
          <i class="fa fa-cube" />
          Fotoğraf İşlemleri
        </h:outputLink>
      </li>
      <li class="active">
        Label İşlemleri
      </li>
    </ol>
  </ui:define>

  <ui:define name="content">
    <div class="row">
      <div class="col-md-12">
        <div class="box box-primary">

          <h:form id="labelForm">

            <div class="box-header with-border">
              <h3 class="box-title">Tüm Labelların Listesi</h3>
            </div>

            <div class="box-body">

              <div class="ui-sm-12 ui-g-12 ui-g-nopad">
                <div class="ui-sm-12 ui-g-6 ui-g-nopad">
                  <div class="ui-sm-12 ui-g-11">
                    <p:outputLabel for="ad" value="Label Adı *" />
                  </div>
                  <div class="ui-sm-12 ui-g-11" >
                    <p:inputText id="ad" value="#{labelBean.label.labelname}" required="true" requiredMessage="Label Adı Giriniz." />
                    <span class="help-block">
                                                <p:message for="ad" />
                                            </span>
                  </div>
                </div>
              </div>

              <div class="box-tools">
                <p:commandButton action="#{labelDetailBean.saveLabel()}"
                                 value="Ekle" immediate="true" styleClass="btn btn-sm btn-success" icon="fa fa-plus" ajax="false" />
              </div>

              <p:dataTable var="label" value="#{labelDetailBean.labels}"
                           id="labelTable" tableStyleClass="table-hover" first="0" rows="20"
                           paginator="true" paginatorPosition="bottom"
                           emptyMessage="Eklenmiş Label Bulunamadı!">

                <p:column headerText="Fotoğraf ID" sortBy="#{label.labelID}">
                  <h:outputText value="#{label.labelID}" />
                </p:column>
                <p:column headerText="Ekleyeceğiniz Label" sortBy="#{label.labelname}">
                  <h:outputText value="#{label.labelname}" />
                </p:column>

                <p:column headerText="İşlem">

                  <!--<p:commandButton action="#{labelDetailBean.updateLabel(label)}" value="Güncelle" styleClass="btn btn-sm btn-primary" icon="fa fa-edit" ajax="false"/>
                  -->
                  <p:growl id="message" showDetail="true"/>
                  <p:commandButton value="Sil" update="message" action="#{labelDetailBean.deleteLabel(label)}" styleClass="btn btn-sm btn-danger" icon="fa fa-remove">
                    <p:confirm header="Onaylama" message="Labeli silmek istediğinize emin misiniz?" icon="pi pi-info-circle"/>
                  </p:commandButton>


                </p:column>
              </p:dataTable>

            </div>

          </h:form>

        </div>
      </div>
    </div>

  </ui:define>

</ui:composition>

In my xhtml file, I am using inputText to fill labelBeanDetail.label.labelname variable, then using saveLabel() function to send this information to insertLabel() sql query function to add into database. However, I am facing with

[ {errorDetails, #{labelDetailBean.saveLabel()}: java.lang.NullPointerException} ] 

What am I missing? I am trying to solve this for a long time, I have tried different things, nothing changed.

After the advice given by Jonathan S. Fisher, I added printStackTrace version to my code:

javax.faces.FacesException: #{labelDetailBean.saveLabel()}: java.lang.NullPointerException at
com.sun.faces.lifecycle.ApplyRequestValuesPhase.execute(ApplyRequestValuesPhase.java:86) at
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) at
com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198) at
javax.faces.webapp.FacesServlet.service(FacesServlet.java:658)<br/> at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230)<br/> at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)<br/> at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:111)<br/> at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)<br/> at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)<br/> at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) at
com.alper.filter.SessionFilter.doFilter(SessionFilter.java:40) at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)```

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文