复选框在Oracle ADF表中:未获取或设置数据

时间:2013-06-10 16:50:10

标签: oracle-adf jdeveloper

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

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

我在View对象中创建了一个临时布尔属性,它正确设置了真实属性。此设置在我的Business Component Tester / Browser中完美运行。但是,在我的JSPX中,获取基于transient属性的复选框的表列不会获取或设置数据。

此设置完全按照此博客中所示完成:Adding Boolean Checkbox to Table Component in Oracle ADF 。例如,我的真实属性(即varchar / string),称为isCurrent。我创建了名为isCurrentBoolean(布尔数据类型)的瞬态列,它们分别设置了checkbox属性。我使用Row Implementation类来正确设置两个属性 - 这在ADF Business Component Tester / Browser中完美运行。

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

有什么想法吗?

谢谢!

更新01:

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

在Row Implementation Class中,每次setter运行IsCurrentBoolean时,我都会添加一条消息。选中复选框后,它不会触发。我将autosubmit设置为true。我会看看我能做些什么,但我可能只是在我的应用程序模块中添加一个方法,并在复选框的值更改侦听器中触发它 - 作为一种解决方法。

JSPX代码:

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

Row Impl Code:这是我对transient属性的设置器(设置真实属性):

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

2 个答案:

答案 0 :(得分:1)

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

基本上,我使用transient属性删除了transient属性和ADF Table列。

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

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

创建了一个转换后的转换器,用于在Boolean和String之间进行转换。使用以下代码创建一个类:

  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"/>

动臂。完成。

答案 1 :(得分:0)

当你说你完全像帖子一样时,你是否也在可更新部分使该属性“始终”!

另外,我希望您包含带有复选框

的网页摘要