我需要通过表单输入并将值放在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),但不会触发操作。
任何想法?
答案 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。