我在p:dataTable
中有这样的东西<h:commandLink action="#{myMB.connect}" icon="ui-icon-person" title="Connect" target="_blank">
<f:setPropertyActionListener value="#{site.name}" target="#{myMB.siteId}" />
Connect
</h:commandLink>
connect()计算我想要添加到请求的唯一ID,例如
UUID id = UUID.randomUUID();
//do some things here with the id
return("./terminal.jsp?id="+id.toString());
这会失败,因为id在terminal.jsp上以null的形式到达。
答案 0 :(得分:1)
由于JSF 2.0你有h:link控件来发出get请求,所以你可以这样使用:
<h:link outcome="terminal.jsp">
<f:param name="id" value="#{myMB.siteId}" />
</h:link>
如果您真的想要发送get请求,可以向jsp发送重定向,则需要将action方法更改为动作侦听器,以便:
public void makeRequest(ActionEvent event) throws IOException {
HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
response.sendRedirect("terminal.jsp?id="+id.toString());
}
<h:commandLink actionListener="#{myMB.makeRequest}" icon="ui-icon-person" title="Connect" target="_blank">
答案 1 :(得分:1)
而不是
return("./terminal.jsp?id="+id.toString());
你想要
FacesContext.getCurrentInstance().getExternalContext().redirect("./terminal.jsp?id="+id.toString())
从操作方法返回字符串只能导航到当前webapp中的页面。如果要导航到外部Web应用程序,则必须使用外部上下文的redirect()方法并返回null。
答案 2 :(得分:0)
也许您必须编写一个简单的servlet并使用RequestDispatcher。而不是h:commandLink,您可以使用h:outputLink。然后:
创建一个servlet。
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
@WebServlet("/myservlet")
public class MyServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
UUID id = UUID.randomUUID();
RequestDispatcher rd=request.getRequestDispatcher("terminal.jsp");
request.setParameter("id", id.toString());
rd.forward(request, response);
}
}
通过
更改commandLink<h:outputLink value="#{request.contextPath}/myservlet" title="Connect" target="_blank">
<f:param name="siteName" value="#{myMB.siteId}" />
</h:commandLink>