1

私の意図は、サーブレットによって会話スコープの Bean を呼び出すことです。Bean 自体は、そのプロパティticketnumberを 4 まで増やす必要があります。

これはサーブレットです:

@WebServlet
public class ConversationServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    @Inject
    private GreetingTicket ticket;


    @Override
    public void init() throws ServletException {
        System.out.println("Init");
        ticket.beginConversation();
    }

    @Override
    protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {

        System.out.println("DoGet");
        PrintWriter writer = response.getWriter();
        response.setContentType("text/html");

        ticket.addTicketNumber();

        System.out.println(ticket.getTicketNumber());

        writer.println("<h1>" + ticket.getTicketNumber() + "</h1>");

        if (ticket.getTicketNumber() == 4) {
            System.out.println("END!");
            ticket.endConversation();
        }

        writer.flush();
        writer.close();

    }
}

クラスGreetingTicketは会話スコープの CDI-Bean です。

@ConversationScoped
public class GreetingTicket implements Serializable {

    @Inject
    Conversation conversation;

    private static final long serialVersionUID = 1L;
    private int ticketNumber;

    public GreetingTicket() {
        System.out.println("greeting Ticket");
    }

    public int getTicketNumber() {
        return ticketNumber;
    }

    public void setTicketNumber(int ticketNumber) {
        this.ticketNumber = ticketNumber;
    }

    public void addTicketNumber() {
        ticketNumber++;
        System.out.println("TicketNumber increased to "+ticketNumber);
    }

    public void beginConversation() {
        if (conversation.isTransient()) {
            System.out.println("Conversation Begin!");
            conversation.begin();
        }
    }

    public void endConversation() {
        if (!(conversation.isTransient())) {
            System.out.println("Conversation End!");
            conversation.end();
        }
    }
}

その結果、すべてのリクエストticketnumberで of がGreetingTicket常に 1by にカウントされるようになりました - なぜでしょうか?

4

1 に答える 1

2

@John Amentは彼のコメントに正しいです。cidクライアントからサーバーにパラメーターを渡す必要があります。

次のコードでは、常に新しい会話を開始しているためです。

@Override
public void init() throws ServletException {
    System.out.println("Init");
    ticket.beginConversation();
}

cid次のような、という名前のリクエスト パラメータを渡す必要があります。

@WebServlet
public class ConversationServlet extends HttpServlet {

    @Inject
    private GreetingTicket ticket;

    @Override
    protected void doGet(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException {

       final String cid = request.getParameter("cid"); 
       // TODO: pass above cid to the conversation

       // ...
    }
}
于 2016-01-04T15:18:47.583 に答える