0

我必须创建一个用于大会注册和付款的平台。对于付款,我的应用程序将用户重定向到后台平台。在付款结束时,银行平台将用户重定向到我的应用程序发送一些数据。为了获取这些数据(按照银行文档),我使用如下 JSP:

<%@page import="EJB.getResponse"%>
<%
long paymentID = Long.parseLong(request.getParameter("paymentid"));
String result = request.getParameter("result");
String auth = request.getParameter("auth");
long ref = Long.parseLong(request.getParameter("ref"));
long tranid = Long.parseLong(request.getParameter("tranid"));
String trackid = request.getParameter("trackid");
out.println("redirect=" + "http://mymachine/congress/result.jsp?paymentID=" + paymentID + "&responsecode=" + responsecode);

%>

如果页面中没有重定向指令,则远程服务器不会发送任何数据。我读到 JSP 已被弃用,那么有没有办法使用 JSF end Beans 来做同样的事情?


根据您的建议,我尝试使用 JSF 和 Beans,如下所示:

<f:metadata>
    <f:viewParam name="result" value="#{getResponse.result}"/>
    <f:viewParam name="auth" value="#{getResponse.auth}"/>
    <f:viewParam name="ref" value="#{getResponse.ref}"/>
    <f:viewParam name="transid" value="#{getResponse.tranid}"/>
    <f:viewParam name="trackid" value="#{getResponse.trackid}"/>
    <f:event type="preRenderView" listener="#{getResponse.redirect}" />
</f:metadata>


public void redirect() throws IOException {
//    FacesContext facesContext = FacesContext.getCurrentInstance();
//            NavigationHandler navigationHandler = facesContext.getApplication().getNavigationHandler();
////           ExternalContext extContext = facesContext.getExternalContext();
////           extContext.redirect("result.jsp?paymentid=" + paymentId +  "&responsecode=" + responsecode + "faces-redirect=true");
//            navigationHandler.handleNavigation(facesContext, null,  "result.jsp?paymentid=" + paymentId + "&responsecode=" + responsecode + "faces-  redirect=true");
     ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
    ec.redirect(ec.getRequestContextPath() + "/result.jsp?paymentid=" + paymentId + "&responsecode=" + responsecode + "faces-redirect=true");
}

我也试过servlet:

@WebServlet("/getresponse")
public class getResponse2 extends HttpServlet {

private Long paymentId;
private String result;
private String auth;
private String ref;
private String traind;
private String trackid;
private String udf1;
private String responsecode;
private String host;


@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    paymentId = Long.parseLong(request.getParameter("paymentid"));
    responsecode = "9999";
    System.out.println("paymentID: " + paymentId);
    // Etc... Put your original JSP code here and alter accordingly.
     request.getRequestDispatcher("notify2.jsp").forward(request, response); 
     //response.sendRedirect("result.jsp?paymentID=" + paymentId + "&responsecode=" + responsecode);  
}

但对于银行平台来说,没有人是正确的。响应页面必须包含 redirect= 字符串。

4

1 回答 1

0

您可以在 xhtml 中使用元数据,即:

<f:metadata>
        <f:viewParam name="result" value="#{yourBean.result}"/>
        <f:viewParam name="auth" value="#{yourBean.auth}"/>
        <f:viewParam name="ref" value="#{yourBean.ref}"/>
        <f:viewParam name="transid" value="#{yourBean.tranid}"/>
        <f:viewParam name="trackid" value="#{yourBean.trackid}"/>
</f:metadata>
于 2013-11-19T14:53:29.007 回答