gpt4 book ai didi

java - 在 Java Server Faces 中将托管属性与 CommandButton 一起使用

转载 作者:太空宇宙 更新时间:2023-11-04 08:58:33 33 4
gpt4 key购买 nike

除了我的问题"Creating an “Edit my Item”-page in Java Server Faces with Facelets"我想讨论一下本文提供的一个问题。

当我按下commandButton时,ID=100被删除并刷新页面,这是它甚至运行该方法之前的,对吧,所以这意味着当我按下按钮时我没有ID。

如何解决这个问题?

通过拥有这个托管 Bean

public class BeanWithId implements Serializable {
private String id;
private String info;

private void populateInfo() {
info = "Some info from data source for id=" + id;
}

public String getId() { return id; }

public void setId(String id) {
this.id = id;
populateInfo();
}

public String getInfo() { return info; }
public void setInfo(String info) { this.info = info; }

public String save() {
System.out.println("Saving changes to persistence store");
return null; // no navigation
}
}

并添加

<p><h:commandButton action="#{beanWithId.save}" value="Save" /></p>

到我的 Facelet 页面。现在,我的 faces-config.xml 中也有正确的信息,当我使用 ?ID=100 访问我的页面时,我确实得到了返回的正确项目。

最佳答案

有多种方法可以保留原始 GET URL 中的 ID。我并不试图做到全面。

commandLink 添加参数

<h:commandLink action="#{beanWithId.save}" value="Save">
<f:param name="ID" value="#{param.ID}" />
</h:commandLink>

每次单击链接时,都会从参数中设置 ID。

使用隐藏字段

<h:form>
<h:inputHidden value="#{beanWithId.id}" />
<p>ID: <h:outputText value="#{beanWithId.id}" /></p>
<p>Info: <h:inputText value="#{beanWithId.info}" /></p>
<p><h:commandButton action="#{beanWithId.save}" value="Save" /></p>
</h:form>

每当发布表单时,都会从表单中设置 ID。

<小时/>

保留 URL

由于表单 URL 不包含原始查询,因此帖子将从浏览器栏中的 URL 中删除 ID。执行操作后,可以通过使用服务器端重定向来纠正此问题。

  public String save() {
System.out.println("Saving changes to persistence store: id=" + id);
redirect();
return null; // no navigation
}

private void redirect() {
FacesContext context = FacesContext.getCurrentInstance();
ExternalContext ext = context.getExternalContext();
UIViewRoot view = context.getViewRoot();
String actionUrl = context.getApplication().getViewHandler().getActionURL(
context, view.getViewId());
try {
// TODO encode id value
actionUrl = ext.encodeActionURL(actionUrl + "?ID=" + id);
ext.redirect(actionUrl);
} catch (IOException e) {
throw new FacesException(e);
}
}

关于java - 在 Java Server Faces 中将托管属性与 CommandButton 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1530671/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com