【问题标题】:Facing issues while setting and resetting values in JSF bean在 JSF bean 中设置和重置值时面临的问题
【发布时间】:2016-12-20 17:53:21
【问题描述】:

我正在开发一个帮助用户创建新帐户的 JSF 项目。在一个页面中,我有两个单选按钮;

<h:selectOneRadio value="#{accountBeans.radioData}" onClick="Common.showRadioButton(value)">
  <f:selectItem itemValue="1" itemLabel="Item 1" />
  <f:selectItem itemValue="2" itemLabel="Item 2" />             
</h:selectOneRadio>

onclick 将转到 Common.js 中定义的 javascript 函数。 accountBeans.java 中给出了getter 和setter 方法来设置bean 中的值;

public String radioData = null;

public String getRadioData() {
    return radiodata;
}

public void setRadioData(String radioData) {
    this.radioData = radioData;
}

当用户第一次登陆这个页面时,两个单选按钮都应该被​​取消选中。为此,我在 accountBeans 中创建了一个方法 reinitilize,它将 radioData 的值重置为 null,而不是使用之前存储的值。

我在使用这种方法时遇到的问题是,当用户在选择单选按钮后导航到其他页面并返回到同一页面时,值会被重置。在创建帐户之前,我需要保留用户选择的值。

如果我不使用 reinitialize 方法来重置存储的值,那么在创建新帐户时,之前存储的值仍然会保留,这是一个问题。谁能告诉我,如何在创建帐户之前保留 radioData 值,然后在创建新帐户时将 radioData 值再次设为空。

【问题讨论】:

  • 一个java bean标准的一部分是使用封装,为什么你的属性是public?还请添加您正在使用的 bean 范围。我想您正在使用 JSF ManagedBeans 吗?因为 CDI 只会给你一个关于公共领域的错误
  • 是的,我正在使用 JSF 托管 Bean。它不会为公共字段抛出任何错误。
  • 请出示Common.showradio...的代码
  • 我在其中定义了一个 switch case,它给出了 case "1": 和 case "2"
  • 您的 bean 是 View 还是 Request 范围?在每一页..

标签: javascript java jsf dojo


【解决方案1】:

当用户第一次登陆这个页面时,两个单选按钮 应该取消选中。为此,我创建了一个方法 在 accountBeans 中重新初始化,它将 radioData 的值重置为 null 而不是使用之前存储的值。

这是自动发生的,您无需执行任何操作,因为这是第一次调用 accountsBean

无论如何,仍在等待您对您正在使用的 bean 范围的回复,但是由于您正在使用我们的 JS 函数来重定向到另一个页面,因此您将不得不使用请求参数:

假设你的 JS 文件中有如下内容:

switch(value){
 case 1: window.location.href = "pageX.xhtml";
  break;
 case 2: window.location.href = "pageY.xhtml";
  break;
}

然后将值附加为请求参数:

"page.xhtml?radioData="+value;

然后在这两个 Facelet 中,您可以通过以下方式访问请求参数:

  <h:head>
    <f:metadata>
        <f:viewParam name="radioData" value="#{bean.radioData}" />
    </f:metadata>
  </h:head>

这样选择的数据将被保留:

<h:link outcome="/index" includeViewParams="true" value="Back" />

<h:form>
    <h:commandButton value="Back" action="/index?faces-redirect=true&amp;includeViewParams=true" />
</h:form>

includeViewParams=true 为下一次重定向设置相同的请求参数。

【讨论】:

  • 在switch语句的情况下,我不会重定向到其他页面。两个选项都显示一个 DOJO 弹出窗口。
  • 另外,在创建新帐户时,会显示以前存储的值。不知道如何
猜你喜欢
  • 2011-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-29
  • 2010-11-08
  • 2022-08-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多