如何从重定向中读取JSF中的GET请求参数

时间:2013-03-08 18:41:02

标签: java ajax jsf

我需要通过表单输入并将值放在Bean字段中。

之后我希望通过按下按钮Bean动作将被触发并在完成时

我需要使用href转移到另一个页面。

我试过了:

<div class="getname">
    <h:form>
        Enter name
        <h:inputText value="#{bean.name}" />
        <br/>
    </h:form>

    <h:commandButton value="Purchase" action="#{bean.sendName}"/>
    <a href="name.jsf?id=#{bean.id}" />
</div>

我设法移动到正确的name.jsf页面(根据ID),但不会触发操作。

任何想法?

2 个答案:

答案 0 :(得分:2)

commandButton组件将表单值提交给托管属性。为此,您必须将其放在<h:form>组件内。

此外,在调用操作后,您不需要单独的链接来离开页面。托管bean Action方法可以返回String,它定义了FacesServlet将转发的导航。

@ManagedBean("bean")
public class MyBean {

  private String id;
  private String name;

  /// property accessors and other stuff

  public String sendName() {
    // do stuff
    return "name.jsf?id=" + this.id;
  }
}

当操作完成后,此返回值会指示您导航到该定义的视图。

答案 1 :(得分:0)

命令按钮和href都是不同的动作,点击命令按钮将执行动作并点击href将用户带到页面名称.jsf

 <h:commandButton value="Purchase" action="#{bean.sendName}"/>
    <a href="name.jsf?id=#{bean.id}" />

你的bean需要这样的东西

@ManagedBean("bean")
public class TestBean {

  @ManagedProperty(value = "#{param.id}")
  private String id;
  private String name;

  public String sendName() {
     //do stuff 
     return "name.jsf?id=" + this.id;
  }
}

您也可以在xhtml中执行此操作以获得相同的结果,

<f:metadata>
    <f:viewParam name="id" value="#{bean.id}" />
</f:metadata>

上面的行将在bean初始化之前从请求参数id设置bean中的参数id。