2

我有一个用 Oracle ADF 编写的应用程序。

在其中,我有一个表,我需要通过该表添加一个映射回 VARCHAR 列的复选框列。

我在我的视图对象中创建了一个临时布尔属性,它正确设置了真实属性。此设置在我的业务组件测试器/浏览器中完美运行。但是,在我的 JSPX 中,根据瞬态属性获取复选框的表列不会获取或设置数据。

此设置完全按照此博客中所示完成:在 Oracle ADF 中将布尔复选框添加到表组件。例如,我的真实属性(即 varchar/string)称为 isCurrent。我创建了名为 isCurrentBoolean(布尔数据类型)的瞬态列,该列分别设置了 checkbox 属性。我使用 Row Implementation 类正确设置了这两个属性 - 这在 ADF 业务组件测试器/浏览器中完美运行。

但是,在我在 JSPX 页面上的表格中,启用了复选框的记录没有显示为选中状态。当我尝试设置数据时,我的提交过程没有运行期间(没有错误,它实际上没有运行)。

有任何想法吗?

谢谢!

更新01:

我的瞬态布尔属性根据字符串/varchar 属性正确获取数据,现在它只是设置数据部分不起作用。

在行实现类中,我添加了一条消息以在每次设置器为 IsCurrentBoolean 运行时触发。选中复选框时不会触发。我已将自动提交设置为 true。我会看看我是否还能做任何其他事情,但我可能只是在我的应用程序模块中添加一个方法,并让它在复选框的值更改侦听器中触发 - 作为一种解决方法。

JSPX 代码:

<af:column sortProperty="IsCurrentBoolean" sortable="false" 
    headerText="Current?" id="c2" width="50">
<af:selectBooleanCheckbox value="#{row.IsCurrentBoolean}" id="sbc1" 
    autoSubmit="true" />

行 Impl 代码:这是我的瞬态属性设置器(设置真实属性):

    if (value) {
        this.setProvPracIsCurrent("Y");
        setAttributeInternal(ISCURRENTBOOLEAN, value);
    } else {
        this.setProvPracIsCurrent("N");
        setAttributeInternal(ISCURRENTBOOLEAN, value);
    }
4

2 回答 2

2

这家伙是救世主:http ://adfreusablecode.blogspot.com/2012/09/afselectbooleancheckbox-with-yn-values.html

基本上,我使用瞬态属性摆脱了瞬态属性和 ADF 表列。

相反,我使用了映射回数据库的属性(String/VarChar)。

将属性添加到我的表中,这创建了一个输入文本框。将输入文本转换为复选框。删除了嵌套在已转换复选框中的验证器标记。

创建了一个转换的转换器以在布尔值和字符串之间进行转换。使用以下代码创建一个类:

  import java.util.Collection;
import java.util.Collections;

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;

import org.apache.myfaces.trinidad.convert.ClientConverter;


public class YNConverter implements Converter, ClientConverter {
    public YNConverter() {
        super();
    }
  public Object getAsObject(FacesContext facesContext, UIComponent uiComponent, String value)
   {
     return "true".equals(value) ? "Y" : "N";
   }

   public String getAsString(FacesContext facesContext, UIComponent uiComponent, Object value)
   {
     return "Y".equals(value) ? "true" : "false";
   }

   public String getClientLibrarySource(FacesContext facesContext)
   {
     return null;
   }

   public Collection<String> getClientImportNames()
   {
     return Collections.emptySet();
   }

   public String getClientScript(FacesContext facesContext, UIComponent uiComponent)
   {
     return null;
   }

   public String getClientConversion(FacesContext facesContext, UIComponent uiComponent)
   {
     return null;
   }
}

在 faces-config.xml 中,添加类并将其定义为 Converter。将其命名为 YNConverter。

在 JSP 页面中,我的复选框如下所示:

   <af:selectBooleanCheckbox value="#{row.bindings.ProvPracIsCurrent.inputValue}"
                                                      label="#{bindings.Ppsqnd4UppUpViewView.hints.ProvPracIsCurrent.label}"
                                                      required="#{bindings.Ppsqnd4UppUpViewView.hints.ProvPracIsCurrent.mandatory}"
                                                      shortDesc="#{bindings.Ppsqnd4UppUpViewView.hints.ProvPracIsCurrent.tooltip}"
                                                      id="it12"
                                                      converter="YNConverter"/>

繁荣。完毕。

于 2013-06-11T18:47:01.940 回答
0

当您说您完全像帖子一样时,您是否还在可更新部分中将属性设置为“始终”!

另外,我希望您包含具有复选框的页面片段

于 2013-06-11T14:59:11.457 回答