2

我需要通过表单获取输入并将值放入 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),但未触发该操作。

有任何想法吗?

4

2 回答 2

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;
  }
}

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

于 2013-03-08T19:06:22.543 回答
0

命令按钮和href都是不同的动作,点击命令按钮将执行动作,点击href将用户带到页面name.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。

于 2013-03-09T21:52:56.963 回答