【问题标题】:How do you maintain your url after a function is used?使用函数后如何维护 url?
【发布时间】:2012-09-06 10:02:41
【问题描述】:

我的网址有问题。 首先,我要显示图像和图像的信息 但是我需要点击一个按钮来显示我的信息。

这是显示图像和不显示信息的链接。 portal/faces/chicken.jsp?image_id=1

所以,在我点击按钮之后。它变成了portal/faces/chicken.jsp

我用于检索图像的代码需要 url image_id=1,因为我正在使用 request.getParameter("image_id") 显示图像。

这是 jsf 中我的按钮的代码:

<h:commandButton action="#{bean1.checkwork}" value="Get Info" type="submit">
    <f:param name="id" value="#{param['image_id']}"></f:param>
</h:commandButton>

这是我的 faces-config.xml 的代码:

<navigation-rule>
    <from-view-id>/MainPage.jsp</from-view-id>
    <navigation-case>
        <from-action>#{bean1.checkwork}</from-action>
        <from-outcome>successful</from-outcome>
        <to-view-id>chicken.jsp?image_id=#{param['image_id']}</to-view-id>
    </navigation-case>
</navigation-rule>

这是我的函数的代码。

      public String checkwork()
      { 
           HttpServletRequest request = (HttpServletRequest)
           FacesContext.getCurrentInstance().getExternalContext().getRequest();
           String image_ID = null;
              if(request!=null)
              {
                   image_ID = request.getParameter("image_id");

                   images(image_ID);
                  student(matric);

               }
          else
          {
               System.out.println("fail");
                }

    return "successful";

}

那么,它与 jsf、托管 bean 或 faces-config.xml 有什么关系吗? 有人知道我的代码有问题吗?

【问题讨论】:

  • 为什么不用ajax渲染图片信息?
  • 好吧,我之前没有教过我使用ajax,因为这实际上是一个基于netbeans的学校作业。我使用的是 tomcat 服务器、jdbc 连接、mysql、托管 bean、servlet、jsp 和 jsf。所以...是的.. :/

标签: url jsf navigation managed-bean faces-config


【解决方案1】:

当你按下按钮时,它确实不会再出现在 URL 中,因为命令按钮发送一个 POST 请求,其中包含请求 body 中的参数,而不是请求 URL。所以请求参数肯定是可用的。使用 HTTP 流量检查器(在 Chrome/IE9/Firebug 中按 F12)您可以看到它。

您的具体问题是因为您为 &lt;f:param&gt; 分配了错误的名称。

<f:param name="id" value="#{param['image_id']}"></f:param>

这样,它只能由 request.getParameter("id") 使用,而不是像您尝试的那样由 getParameter("image_id") 使用。相应地修正名称:

<f:param name="image_id" value="#{param['image_id']}" />

关于在使用“函数”(“函数”是错误的术语,您的意思可能是“方法”、“操作方法”)之后维护 URL 的具体问题,只需使用 GET 而不是 POST。使用&lt;h:button&gt; 而不是&lt;h:commandButton&gt;。您只需更改代码以调用与目标视图关联的 bean 的 (post)constructor 或 &lt;f:event preRenderView&gt; 中的实际操作。


与具体问题无关,有更好的方法可以在您的 backing bean 中获取它。

String imageId = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("image_id");

在您的 JSF 代码中引入 javax.servlet.* 表示您正在以笨拙的方式做事。请注意,request从不为 null(否则如何执行 JSF 代码?),因此对request 的 nullcheck 也完全没有必要。

另一种方法是使用@ManagedProperty

@ManagedProperty("#{param.image_id}")
private String imageId; // +setter

这仅适用于请求范围的 bean。

【讨论】:

    猜你喜欢
    • 2023-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-10
    • 1970-01-01
    • 2016-05-10
    • 1970-01-01
    • 2011-07-16
    相关资源
    最近更新 更多