将值从页面传递到其他页面 JSF
Passing Values from page to other page JSF
我是java server faces (JSF) 的初学者,我需要将文本输入的内容传递到第二页以显示它,同样适用于第二页:我想传递单选按钮值到第三页。我搜索并尝试了很多但没有成功。
例如我试过
<h:commandButton value="Next" action="#{myBean.execute(input_id.value)}"/>
执行方法为:
public void execute(String value) {
// ...
try{
FacesContext.getCurrentInstance().getExternalContext().dispatch("/Quizy.xhtml?faces-redirect=true");
}
catch(Exception e){
System.out.println("err");
}
}
有什么建议吗?
有多种方法可以做到这一点,但这里是其中一种。
您需要将 inputText 值保存到 bean 的 属性 中,并且您的 h:inputText
和 h:commanButton
应该在同一个 h:form
元素中
这是一个示例代码
在您看来
<h:form>
...
<h:inputText value={myBean.someValue} />
....
<h:commandButton value="Next" action="#{myBean.execute()}"/>
</h:form>
如果您希望 属性 (someValue) 在不同的页面。托管 bean 的内容也应如下所示:
private String someValue;
// Getter and setter for `someValue`
public String execute() {
// ...
return "/Quizy.xhtml?faces-redirect=true";
}
在第二页如果你想检索那个值,只需使用#{myBean.someValue}
要完成此操作,您只需将此处输入文本或单选按钮的组件的 Value 设置为 属性 你的 Managed bean 或 Cdi bean 在页面上调用当然你不会忘记你的 属性 有 getter 和 setter 方法在你的豆子里。最后确保 Ur bean 的范围允许它在整个会话中保持活动状态(及其所有属性的值)。然后,从你的结束页面,你可以调用你的 Managed bean 或 Cdi bean 属性作为页面组件的值
这里有 4 种将参数值从 JSF 页面传递到其他 JSF 页面的方法:
1- Method expression (JSF 2.0)
2- f:param
3- f:attribute
4- f:setPropertyActionListener
1.方法表达式
从 JSF 2.0 开始,您可以像这样在方法表达式中传递参数值 #{bean.method(param)}.
JSF 页面
<h:commandButton action="#{user.editAction(delete)}" />
ManagedBean
@ManagedBean(name="user")
@SessionScoped
public class UserBean{
public String editAction(String id) {
//id = "delete"
}
}
2-f:param
通过f:param标签传递参数值并通过backing bean中的请求参数取回。
JSF 页面
<h:commandButton action="#{user.editAction}">
<f:param name="action" value="delete" />
</h:commandButton>
ManagedBean
@ManagedBean(name="user")
@SessionScoped
public class UserBean{
public String editAction() {
Map<String,String> params =
FacesContext.getExternalContext().getRequestParameterMap();
String action = params.get("action");
//...
}
}
3。 f:atribute
通过 f:atribute 标记传递参数值并通过支持 bean 中的动作侦听器取回它。
JSF 页面
<h:commandButton action="#{user.editAction}" actionListener="#{user.attrListener}">
<f:attribute name="action" value="delete" />
</h:commandButton>
ManagedBean
@ManagedBean(name="user")
@SessionScoped
public class UserBean{
String action;
//action listener event
public void attrListener(ActionEvent event){
action = (String)event.getComponent().getAttributes().get("action");
}
public String editAction() {
//...
}
}
4. f:setPropertyActionListener
通过 f:setPropertyActionListener 标记传递参数值,它会直接将值设置到您的支持 bean 属性。
JSF 页面
<h:commandButton action="#{user.editAction}" >
<f:setPropertyActionListener target="#{user.action}" value="delete" />
</h:commandButton>
ManagedBean
@ManagedBean(name="user")
@SessionScoped
public class UserBean{
public String action;
public void setAction(String action) {
this.action = action;
}
public String editAction() {
//now action property contains "delete"
}
}
我是java server faces (JSF) 的初学者,我需要将文本输入的内容传递到第二页以显示它,同样适用于第二页:我想传递单选按钮值到第三页。我搜索并尝试了很多但没有成功。 例如我试过
<h:commandButton value="Next" action="#{myBean.execute(input_id.value)}"/>
执行方法为:
public void execute(String value) {
// ...
try{
FacesContext.getCurrentInstance().getExternalContext().dispatch("/Quizy.xhtml?faces-redirect=true");
}
catch(Exception e){
System.out.println("err");
}
}
有什么建议吗?
有多种方法可以做到这一点,但这里是其中一种。
您需要将 inputText 值保存到 bean 的 属性 中,并且您的 h:inputText
和 h:commanButton
应该在同一个 h:form
元素中
这是一个示例代码
在您看来
<h:form>
...
<h:inputText value={myBean.someValue} />
....
<h:commandButton value="Next" action="#{myBean.execute()}"/>
</h:form>
如果您希望 属性 (someValue) 在不同的页面。托管 bean 的内容也应如下所示:
private String someValue;
// Getter and setter for `someValue`
public String execute() {
// ...
return "/Quizy.xhtml?faces-redirect=true";
}
在第二页如果你想检索那个值,只需使用#{myBean.someValue}
要完成此操作,您只需将此处输入文本或单选按钮的组件的 Value 设置为 属性 你的 Managed bean 或 Cdi bean 在页面上调用当然你不会忘记你的 属性 有 getter 和 setter 方法在你的豆子里。最后确保 Ur bean 的范围允许它在整个会话中保持活动状态(及其所有属性的值)。然后,从你的结束页面,你可以调用你的 Managed bean 或 Cdi bean 属性作为页面组件的值
这里有 4 种将参数值从 JSF 页面传递到其他 JSF 页面的方法:
1- Method expression (JSF 2.0)
2- f:param
3- f:attribute
4- f:setPropertyActionListener
1.方法表达式
从 JSF 2.0 开始,您可以像这样在方法表达式中传递参数值 #{bean.method(param)}.
JSF 页面
<h:commandButton action="#{user.editAction(delete)}" />
ManagedBean
@ManagedBean(name="user")
@SessionScoped
public class UserBean{
public String editAction(String id) {
//id = "delete"
}
}
2-f:param
通过f:param标签传递参数值并通过backing bean中的请求参数取回。
JSF 页面
<h:commandButton action="#{user.editAction}">
<f:param name="action" value="delete" />
</h:commandButton>
ManagedBean
@ManagedBean(name="user")
@SessionScoped
public class UserBean{
public String editAction() {
Map<String,String> params =
FacesContext.getExternalContext().getRequestParameterMap();
String action = params.get("action");
//...
}
}
3。 f:atribute
通过 f:atribute 标记传递参数值并通过支持 bean 中的动作侦听器取回它。
JSF 页面
<h:commandButton action="#{user.editAction}" actionListener="#{user.attrListener}">
<f:attribute name="action" value="delete" />
</h:commandButton>
ManagedBean
@ManagedBean(name="user")
@SessionScoped
public class UserBean{
String action;
//action listener event
public void attrListener(ActionEvent event){
action = (String)event.getComponent().getAttributes().get("action");
}
public String editAction() {
//...
}
}
4. f:setPropertyActionListener
通过 f:setPropertyActionListener 标记传递参数值,它会直接将值设置到您的支持 bean 属性。
JSF 页面
<h:commandButton action="#{user.editAction}" >
<f:setPropertyActionListener target="#{user.action}" value="delete" />
</h:commandButton>
ManagedBean
@ManagedBean(name="user")
@SessionScoped
public class UserBean{
public String action;
public void setAction(String action) {
this.action = action;
}
public String editAction() {
//now action property contains "delete"
}
}