0

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

这是显示图像和不显示信息的链接。门户/面孔/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 有什么关系吗?有人知道我的代码有问题吗?

4

1 回答 1

1

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

您的具体问题是由于您分配<f:param>了错误的名称而引起的。

<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。使用<h:button>而不是<h:commandButton>. 您只需要更改代码以调用(后)构造函数或<f:event preRenderView>与目标视图关联的 bean 中的实际操作。


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

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

javax.servlet.*您的 JSF 代码中导入即表明您正在以笨拙的方式做事。请注意,request永远不会为空(否则 JSF 代码将如何执行?),因此 nullcheck onrequest也完全没有必要。

另一种方法是使用@ManagedProperty

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

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

于 2012-09-06T11:11:40.203 回答