我是java服务器面(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");
}
}
有什么建议吗?
答案 0 :(得分:9)
有四种方法可以将参数值从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标签传递参数值,并通过辅助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:属性附加伤害强>
通过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"
}
}
答案 1 :(得分:6)
有几种方法可以做到这一点,但这里有一种方法。
您需要将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至少应为会话范围。托管bean的内容也应如下所示:
private String someValue;
// Getter and setter for `someValue`
public String execute() {
// ...
return "/Quizy.xhtml?faces-redirect=true";
}
如果要检索该值,请在第二页中使用#{myBean.someValue}
答案 2 :(得分:-1)
要完成此操作,您只需将此组件的值设置为inputText或radioButton到托管bean或Cdi bean <的属性 / strong>在页面上调用当然你不会忘记在ur bean中使用urter属性的getter和setter方法。最后确保Ur bean的范围允许它在整个会话中保持活动状态(包含其所有属性的值)。然后,从最终页面开始,您可以将托管bean或Cdi bean proprety称为页面组件的值