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