我有一个用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);
}
答案 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)
当你说你完全像帖子一样时,你是否也在可更新部分使该属性“始终”!
另外,我希望您包含带有复选框
的网页摘要