当前位置: 首页 > 面试题库 >

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

弓华茂
2023-03-14
问题内容

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

您如何解决呢?

通过拥有这个Managed 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中删除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);
    }
  }


 类似资料:
  • 我目前的项目是用JavaFX完成的。我使用属性将(双向)视图字段绑定到bean(使用JFXtras的BeanPathAdapter)。 我选择用JPA和ObjectDB作为模型。 这是我第一次在独立的项目中使用JPA,这里我面临的是托管实体的问题。 实际上,我将托管实体绑定到视图字段,当视图字段的值更改时,实体会更新...和数据库也是如此。 我正在尝试找到一种手动保存/合并实体的方法,以便我可以询

  • 实际上,我们使用Google IdP作为应用程序的SSO/SAML身份验证类型。我们已将其配置为将用户连接到应用程序,并且运行良好。但最近,我们还想要求用户对应用程序生命周期中可能发生的不同操作进行重新验证。 更详细地说,当我们向Google Idp发送SAML请求时,我们在节点“AuthnRequest”中添加了属性ForceAuthn=“true”,我们还添加了AuthnContextClas

  • 属性文件如何与Apache Camel一起使用,以引用可配置的属性。例如,如果有从文件夹读取文件的路由,那么如何在属性文件中配置该文件夹位置。我正在使用JavaDSL。

  • 我试图在Material UI的TextField上使用React的“ref”属性访问输入数据。通过“inputRef”或“inputProps”似乎没有一种简单的方法可以做到这一点。 下面的示例显示了第26行的inputProps的使用。将TextField的名称指定给“ref”属性似乎不会生成有效的对象。 对于“inputRef”,根据Material ui文档,它强制使用函数,尝试将字段数据

  • 我有一个重命名了布尔变量的FileBean。它有以下代码。 我已经使用请求对象将其对象传递给jsp(考虑fileDetail是一个请求属性名)。我的jsp包含以下代码。 使用这个,我在jsp上获得了以下运行时异常。 请向我建议解决办法。 提前谢谢。

  • 我正在使用boilerpipe从html中获取文本。然而,有一些问题我还没有解决。我有一个50k元素的列表。我正在创建一个包含1000个元素的rdd,然后对它们进行处理,并将结果rdd保存在hdfs中。我遇到的错误是: 在hdfs文件中,前1000个元素的结果被保存,但继续下去会抛出上述错误。这个问题有什么解决办法?