使用ltrim和rtrim保存字符串

时间:2017-03-22 08:27:32

标签: xpages

我正在尝试保存字符串,左端没有空格,右端没有空格。

来自这两个网站website1website2。我开始使用ltrim和rtrim去除空间。

在xpage中,有一个编辑框,它使用数据绑定绑定到名为Topic的表单,字段名称为topic。还有一个按钮和一个计算字段。

以下是xpage的完整代码。

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:this.data>
    <xp:dominoDocument var="document1" formName="Topic"
        computeWithForm="onsave">
    </xp:dominoDocument>
</xp:this.data>

<xp:inputText id="inputText1" value="#{document1.topic}"></xp:inputText>
<xp:br></xp:br>
<xp:br></xp:br>
<xp:button value="Label" id="button1">
    <xp:eventHandler event="onclick" submit="true"
        refreshMode="complete">
        <xp:this.action><![CDATA[#{javascript:var input = getComponent("inputText1").getValue();
var trimleft = input.ltrim();
var trimright = trimleft.rtrim();
getComponent("computedField1").setValue(trimright);
document1.save();
}]]></xp:this.action>
    </xp:eventHandler>
</xp:button>
<xp:br></xp:br>
<xp:br></xp:br>
<xp:text escape="true" id="computedField1"></xp:text>
</xp:view>

当我运行它时,我可以看到输入的左端没有sapce,并且计算字段中输入的右端没有空格。例如,如果我输入&#34;这是测试&#34;,计算字段可以显示这样的结果&#34;这是测试&#34;。

但是在Lotus Notes Client中,我打开视图,我注意到保存的输入有空格(与原始输入相同)。

然后我尝试将customConverter放入编辑框中。代码就像这样

<xp:inputText id="inputText1" value="#{document1.topic}">
    <xp:this.converter>
        <xp:customConverter getAsString="#{javascript:value}">
            <xp:this.getAsObject><![CDATA[#{javascript:var trimvalueleft = value.ltrim();
var trimvalueright = trimvalueleft.rtrim();
var value = trimvalueright;
value}]]></xp:this.getAsObject>
        </xp:customConverter>
    </xp:this.converter>
</xp:inputText>

我使用相同的输入再次运行它#34;这是测试&#34;,我看到保存的输入仍然有空格。

之后,我打开表单,在字段中,我将@Trim(主题)放在输入翻译中并再次运行,结果是一样的。

我不知道为什么即使我使用rtrim和ltrim,保存的值仍然有空间。如果有人让我知道我的错误,感激不尽。谢谢。

2 个答案:

答案 0 :(得分:1)

我会倾向于转换器而忘记了复杂的保存操作。您也可以再次重新引用页面上的值而无需手动设置。请尝试以下方法:

tasks:
  - include_role:
      name: "mysql"
    when: "'mysql' in roles"
  - include_role:
      name: "apache"
    when: "'apache' in roles"

答案 1 :(得分:0)

我怀疑原因是您正在更新组件值(getComponent.setVaue()),但保存数据源。只有当save()从所有组件中再次提取所有值时,这才有效。如果情况确实如此,我会感到惊讶,并且可能会有很大的表现。

改为更新数据源(例如document1.replaceItemValue("myField",myValue))。只有当您无法访问它所绑定的数据源时才会访问该组件(例如,在转换器/验证器中,因为数据源尚未更新)。

或者,因为您已经在使用computeWithForm onsave,所以在表单中使用@Trim()。