我的网址有问题。 首先,我必须显示图像和图像的信息 但我需要点击一个按钮来显示我的信息。
这是显示图像和未显示信息的链接。 门户/面/ 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有什么关系? 有人知道我的代码有问题吗?
答案 0 :(得分:1)
当您按下按钮时,它确实不会出现在URL中,因为命令按钮会在请求正文而不是请求URL中发送带有参数的POST请求。所以请求参数绝对可用。使用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>
。您只需要更改代码以调用(post)构造函数中的实际操作或与目标视图关联的bean的<f:event preRenderView>
。
无关,有更好的方法可以在你的支持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。