2

<h:form>当我在下面提到的页面中单击标签的命令按钮时,我希望一旦我点击提交按钮,查询参数就会作为请求参数发送,因为我的页面 URL 是../index.xhtml?cid=12&ctype=video.

我希望在我的操作方法中它应该被打印CID=12,但是,它被打印了CID=NULL。有什么问题,我该如何解决?

我的观点:

<h:body id="body">
    <h:form id="form">    
        <p:commandButton action="#{authorizationBean.getParameters()}" value="Ajax Submit" id="ajax" />   
    </h:form> 
</h:body>

我的托管bean:

@ManagedBean
@SessionScoped
public class AuthorizationBean {

    public boolean getParameters(){
        Map<String, String> parameterMap = (Map<String, String>) FacesContext.getCurrentInstance()
                    .getExternalContext().getRequestParameterMap();
        String cid = parameterMap.get("cid");
        System.out.println("CID="+cid);
        return true;
    }

}
4

2 回答 2

6

默认情况下,您的代码(尤其是您的<h:form>标签)会生成以下 HTML 输出:

<form id="form" name="form" method="post" action="/yourApp/yourPage.xhtml" enctype="application/x-www-form-urlencoded">
    <input type="submit" name="j..." value="Ajax Submit" />
    <input id="javax.faces.ViewState" ... />
</form>

请注意,action生成的<form>元素是当前视图 ID,没有附加任何获取参数,尽管初始页面可能有它们。因此,它们也没有在表单提交上设置。

要处理这种情况,您可以:

  1. 在初始访问时使用@ViewScoped保存这些参数值的 bean;
  2. 将一些隐藏的输入字段添加到您的表单中,以便它们在表单提交时发送或嵌套<f:param>在您的<h:commandButton>;
  3. 使用OmniFaces 的标签<o:form includeViewParams="true">标签文档/展示示例)而不是细节)。<h:form><f:viewParam>
于 2013-10-01T14:12:57.737 回答
1

我就是这样做的,我只是不能告诉你这是否是最好的方法......

客户端:

<h:outputLink target="_blank" value="detalhepesquisa.jsf">
        <h:outputText value="#{te.empresa.nome}" />
        <f:param name="id" value="#{te.empresa.id}"></f:param>
</h:outputLink>

在你的 bean 中:

String parametroID = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("id");
于 2013-10-01T15:13:36.993 回答