我是java服务器面(JSF)的初学者,我需要将文本输入的内容传递给第二页来显示它,同样适用于第二页:我想将单选按钮值传递给第三页.我搜索并尝试了许多没有成功.比如我试过了
<h:commandButton value="Next" action="#{myBean.execute(input_id.value)}"/>
Run Code Online (Sandbox Code Playgroud)
执行方法是:
public void execute(String value) {
// ...
try{
FacesContext.getCurrentInstance().getExternalContext().dispatch("/Quizy.xhtml?faces-redirect=true");
}
catch(Exception e){
System.out.println("err");
}
}
Run Code Online (Sandbox Code Playgroud)
有什么建议?
小智 9
有四种方法可以将参数值从JSF页面传递到其他页面JSF:
1- Method expression (JSF 2.0)
2- f:param
3- f:attribute
4- f:setPropertyActionListener
Run Code Online (Sandbox Code Playgroud)
1.方法表达
从JSF 2.0开始,您可以在方法表达式中传递参数值,如#{bean.method(param)}.
JSF页面
<h:commandButton action="#{user.editAction(delete)}" />
Run Code Online (Sandbox Code Playgroud)
ManagedBean
@ManagedBean(name="user")
@SessionScoped
public class UserBean{
public String editAction(String id) {
//id = "delete"
}
}
Run Code Online (Sandbox Code Playgroud)
2- f:param
通过f:param标签传递参数值,并通过辅助bean中的请求参数返回.
JSF页面
<h:commandButton action="#{user.editAction}">
<f:param name="action" value="delete" />
</h:commandButton>
Run Code Online (Sandbox Code Playgroud)
ManagedBean
@ManagedBean(name="user")
@SessionScoped
public class UserBean{
public String editAction() {
Map<String,String> params =
FacesContext.getExternalContext().getRequestParameterMap();
String action = params.get("action");
//...
}
}
Run Code Online (Sandbox Code Playgroud)
3. f:属性
通过f:atribute标记传递参数值,并通过辅助bean中的动作侦听器将其返回.
JSF页面
<h:commandButton action="#{user.editAction}" actionListener="#{user.attrListener}">
<f:attribute name="action" value="delete" />
</h:commandButton>
Run Code Online (Sandbox Code Playgroud)
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() {
//...
}
}
Run Code Online (Sandbox Code Playgroud)
4. f:setPropertyActionListener
通过f:setPropertyActionListener标记传递参数值,它会将值直接设置到您的支持bean属性中.
JSF页面
<h:commandButton action="#{user.editAction}" >
<f:setPropertyActionListener target="#{user.action}" value="delete" />
</h:commandButton>
Run Code Online (Sandbox Code Playgroud)
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"
}
}
Run Code Online (Sandbox Code Playgroud)
有几种方法可以做到这一点,但这里有一个.您需要将inputText值保存到bean的属性中,并且您h:inputText
和您的属性h:commanButton
应该在同一个h:form
元素中
这是一个示例代码
在你看来
<h:form>
...
<h:inputText value={myBean.someValue} />
....
<h:commandButton value="Next" action="#{myBean.execute()}"/>
</h:form>
Run Code Online (Sandbox Code Playgroud)
如果您希望您的属性(someValue)在不同的页面中可用,那么您的托管bean至少应该是会话作用域.托管bean的内容也应如下所示:
private String someValue;
// Getter and setter for `someValue`
public String execute() {
// ...
return "/Quizy.xhtml?faces-redirect=true";
}
Run Code Online (Sandbox Code Playgroud)
在第二页中,如果要检索该值,只需使用 #{myBean.someValue}
归档时间: |
|
查看次数: |
13161 次 |
最近记录: |