gpt4 book ai didi

java - (JAVA EE)方法无法正常工作,不会引发任何错误

转载 作者:行者123 更新时间:2023-11-30 07:09:24 26 4
gpt4 key购买 nike

我正在使用 Java EE、EJB 和 JPA (EclipseLink) 开发航空公司管理 Web 应用程序

当我从 servlet 调用服务层中的方法时遇到了麻烦:该方法没有执行预期的操作而没有任何错误。

方法是 AddPassengerToFlight,我试图将乘客添加到航类实体中具有多对多关系的乘客列表中。

这是项目的结构。

这是没有 getter 和 setter 的 Flight 和 The Passenger 实体:

航类:

public class Flight implements Serializable {


@Id
@GeneratedValue( strategy = GenerationType.AUTO )
private Integer id;

@Enumerated( EnumType.STRING )
private Cities depart;

@Enumerated( EnumType.STRING )
private Cities destination;

private String prix;

@Temporal( TemporalType.TIMESTAMP )
private Date date;

@ManyToMany( cascade = { CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH } )
@JoinTable( name = "f_p_join", joinColumns = @JoinColumn( name = "flight_fk" ), inverseJoinColumns = @JoinColumn( name = "passenger_fk" ) )
private List<Passenger> passengers;

@OneToOne( )
@JoinColumn( name = "airplane_fk" )
private Plane airplane;

@OneToOne( )
@JoinColumn( name = "pilot_fk" )
private Pilot pilot;
}

乘客:

public class Passenger implements Serializable {


@Id
@GeneratedValue( strategy = GenerationType.AUTO )
private Integer id;

private String nom;

private String prenom;

private String adresse;

private String telephone;

private String email;

@Enumerated( EnumType.STRING )
private FlightClass flightClass;

@ManyToMany( mappedBy = "passengers" )
private List<Flight> flights;
}

我有方法的 PassenerService :

public class PassengerService {

private static final String CHAMP_FLIGHT_ID = "flightId";
private static final String CHAMP_PASSENGER_ID = "passengerId";

private String resultat;
private Map<String, String> erreurs = new HashMap<String, String>();
private PassengerDao passengerDao;
private FlightDao flightDao;
private PilotDao pilotDao;
private PlaneDao planeDao;

public Map<String, String> getErreurs() {
return erreurs;
}

public String getResultat() {
return resultat;
}

public PassengerService( PassengerDao passengerDao, FlightDao flightDao, PilotDao pilotDao, PlaneDao planeDao ) {
this.passengerDao = passengerDao;
this.flightDao = flightDao;
this.pilotDao = pilotDao;
this.planeDao = planeDao;
}

public Passenger createPassenger( HttpServletRequest request ) {
//The createPassenger code
}

public List<Passenger> getAllPassengers() {
//The getAllPassengers Code
}

public void AddPassengerToFlight( HttpServletRequest request ) {
FlightService flightService = new FlightService( flightDao, planeDao, pilotDao );

String passengerId = request.getParameter( CHAMP_PASSENGER_ID );
String flightId = request.getParameter( CHAMP_FLIGHT_ID );

Passenger passenger = getPassengerById( passengerId );
Flight flight = flightService.getFlightById( flightId );

List<Passenger> pList = flight.getPassengers();
pList.add( passenger );
flight.setPassengers( pList );

passenger.getFlights().add( flight );

}

public Passenger getPassengerById( String passengerId ) {
Passenger passenger = passengerDao.getPassengerById( passengerId );
return passenger;
}

public void removePassenger( Passenger passenger ) {
//The removePassenger code

}


}

这是 servlet AddPassengerToFlight

@WebServlet( "/AddPassengerToFlight" )
public class AddPassengerToFlight extends HttpServlet {

private static final String VUE_REDIRECT = "/airline/PassengerList";

private static final long serialVersionUID = 1L;

@EJB
FlightDao flightDao;

@EJB
PilotDao pilotDao;

@EJB
PlaneDao planeDao;

@EJB
PassengerDao passengerDao;


protected void doGet( HttpServletRequest request, HttpServletResponse response ) throws ServletException,
IOException {
FlightService flightService = new FlightService( flightDao, planeDao, pilotDao );
PassengerService passengerService = new PassengerService( passengerDao, flightDao, pilotDao, planeDao );

List<Flight> flights = flightService.getAllFlights();
List<Passenger> passengers = passengerService.getAllPassengers();
request.setAttribute( "flights", flights );
request.setAttribute( "passengers", passengers );
this.getServletContext().getRequestDispatcher( VUE ).forward( request, response );
}


protected void doPost( HttpServletRequest request, HttpServletResponse response ) throws ServletException,
IOException {
PassengerService passengerService = new PassengerService( passengerDao, flightDao, pilotDao, planeDao );

passengerService.AddPassengerToFlight( request );
response.sendRedirect( VUE_REDIRECT );

}

}

这是 AddPassengerToFlight 表单(JSP 文件)

<div class="container">
<h2>Adding Passenger To Flight</h2>
<br/><br/>
<form method="POST" action="AddPassengerToFlight">
<div class="form-group">
<h4>Flight :</h4>
<select name="flightId" class="selectpicker" data-live-search="true" data-width="100%">
<c:forEach items="${flights}" var="flight">
<option value="${flight.id}">
FROM <c:out value="${flight.depart}" /> TO <c:out value="${flight.destination}" /> AT <c:out value="${flight.date}" />
</option>
</c:forEach>
</select>
</div>


<div class="form-group">
<h4>Passenger :</h4>
<select name="passengerId" class="selectpicker" data-live-search="true" data-width="100%">
<c:forEach items="${passengers}" var="passenger">
<option value="${passenger.id}"><c:out value="${passenger.nom}" /></option>
</c:forEach>
</select>
</div>

<button type="submit" class="btn btn-default">Submit</button>

</form>
</div>

当我单击 AddPassengerToFlight 的按钮提交时,我被重定向到 PassengerList 但两个实体(航类和乘客)之间没有任何反应,并且我没有错误。

有人能弄清楚我在这里做错了什么吗?

最佳答案

我相信你的问题是你的 PassengerService 类是一个普通的 JAVA 类(我解释一下,不是 EJB 服务)...因此,当你在该类中建立 Passanger 和 Flight 之间的关联时,没有 JTA事务正在运行并且您的实体处于分离模式;因此,对它们的任何更改都不会保留在数据库中。

您可以快速尝试一下,看看我是否正确...使您的服务成为一个 EJB 类,并通过 @EJB 注释注入(inject)所需的 DAO,从 Servlet 注入(inject)您的新 EJB,然后调用方法:AddPassengerToFlight( HttpServletRequest request ) ...

关于java - (JAVA EE)方法无法正常工作,不会引发任何错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39459475/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com