是否可以使用EL语言在自定义控件中创建动态字段名?

时间:2016-09-09 07:32:53

标签: xml xpages field custom-controls el

我有一个包含很多字段的自定义控件,我想在同一个Xpage上多次包含这个自定义控件但是我需要为我添加的每个自定义控件使用不同的字段名,因为我有很多字段不想为所有字段创建属性定义。

我使用包括RT在内的所有类型的字段,所以我想我需要使用EL语言完成绑定,

有没有办法让字段名称动态化?因此,这些字段将以我添加到属性定义中的内容为后缀,即在第一个cc中,所有字段的后缀为“_1”,第二个字段为“_2”,依此类推。

下面只是一个自定义控件的例子

<?xml version="1.0" encoding="UTF-8"?>
    <xp:view xmlns:xp="http://www.ibm.com/xsp/core">

        <xp:panel>
            <xp:inputText id="inputText1" value="#{d.Fld1}"></xp:inputText>
            <xp:inputText id="inputText2" value="#{d.Fld2}"></xp:inputText>
            <xp:inputText id="inputText3" value="#{d.Fld3}"></xp:inputText>
        </xp:panel>
    </xp:view>

1 个答案:

答案 0 :(得分:1)

可以在第一次加载时使用预处理器 public static HtmlTag Login<T>(this IHtmlHelper<T> htmlHelper, Expression<Func<T, object>> expression, Action<HtmlTag> inputModifier = null) { inputModifier = inputModifier ?? (_ => { }); var div = new HtmlTag("div"); div.AddClass("form-control"); var lbl = htmlHelper.LabelFor(expression); div.Append(lbl); return div; } 替换自定义控件的代码部分。

例如,表达式

${javascript:...}

取代

value="#{doc.${javascript:'Fld1_' +  compositeData.index}}"

如果value="#{doc.Fld1_2}" 为“2”。

以下是用于测试目的的工作示例:

自定义控件“ccFields”:

compositeData.index

使用属性定义 enter image description here

主XPage:

<?xml version="1.0" encoding="UTF-8"?>
<xp:view
    xmlns:xp="http://www.ibm.com/xsp/core">
    <xp:panel>
        <xp:inputText
            id="inputText1"
            value="#{doc.${javascript:'Fld1_' +  compositeData.index}}" />
        <xp:inputText
            id="inputText2"
            value="#{doc.${javascript:'Fld2_' +  compositeData.index}}" />
        <xp:inputRichText
            id="inputRichText1"
            value="#{doc.${javascript:'Fld3_' +  compositeData.index}}" />
    </xp:panel>
</xp:view>

当您点击“保存”按钮时,它会创建一个新文档,其格式为“Test”,文本字段为

  • Fld1_1
  • Fld1_2
  • Fld2_1
  • Fld2_2

和富文本字段

  • Fld3_1
  • Fld3_2

使用您输入的值。