REST服务和Xpages服务器端验证

时间:2014-04-19 16:44:57

标签: xpages xpages-extlib

我是扩展库REST服务和xpages的新手,我需要找到一种可以用服务器数据验证用户输入数据的方法,以避免服务器往返,我打算使用REST服务。

我尝试使用下面的内容但没有运气,任何人都可以在下面的代码失败的地方纠正我。

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


    <xp:this.data>
        <xp:dominoDocument var="document1" formName="NavConfig"></xp:dominoDocument>
    </xp:this.data>
    <xe:restService id="restService1">

        <xe:this.service>
            <xe:documentJsonService compact="true"
                formName="NavConfig">
                <xe:this.querySaveDocument><![CDATA[#{javascript:var cmp=getComponent('menuItem1').getValue();
if (cmp=""){
getComponent('msg').setValue("Validation Failed")
}}]]></xe:this.querySaveDocument>
            </xe:documentJsonService>
        </xe:this.service>
    </xe:restService>
    <xp:br></xp:br>
    <xp:br></xp:br>
    <xp:text escape="true" id="msg"></xp:text>
    <xp:panel style="margin-left:20.0px;margin-top:20.0px">
        <xp:table>
            <xp:tr>
                <xp:td>
                    <xp:label value="Menu item:" id="menuItem_Label1"
                        for="menuItem1">
                    </xp:label>
                </xp:td>
                <xp:td>
                    <xp:inputText value="#{document1.MenuItem}"
                        id="menuItem1">
                    </xp:inputText>
                </xp:td>
            </xp:tr>
            <xp:tr>
                <xp:td>
                    <xp:label value="Link address:"
                        id="linkAddress_Label1" for="linkAddress1">
                    </xp:label>
                </xp:td>
                <xp:td>
                    <xp:inputText value="#{document1.linkAddress}"
                        id="linkAddress1">
                    </xp:inputText>
                </xp:td>
            </xp:tr>
        </xp:table></xp:panel>
    <xp:panel style="margin-top:20.0px;margin-left:20.0px">

        <xp:button value="Save" id="button2"><xp:eventHandler event="onclick" submit="true" refreshMode="complete">
    <xp:this.action>
        <xp:save></xp:save>
    </xp:this.action></xp:eventHandler></xp:button></xp:panel>
</xp:view>

1 个答案:

答案 0 :(得分:3)

REST本质上是一个“愚蠢”的API。我宁愿说:优雅简洁。您从服务器获取数据,然后将其PUT / POST回或删除它。因此,每次与REST交谈时,都会有一个服务器往返 - 这就是REST如何构建。

在XPage中,当您的客户端(JavaScript)通过REST请求数据时,该服务不会与页面上的任何组件交互,因此检查菜单或设置组件的文本对REST调用没有影响。

当您想要进行客户端验证时,您需要在客户端脚本中实现它,否则您确实有一个服务器往返(实际上可能不是那么糟糕)。

我想,最灵活的是,使用自定义REST服务(也由其余控件提供)来创建自己的JSON,它只包含 您实际需要的项目,但为您的本地验证代码添加信息,如{'requiredFields' : [{'name' : 'subject', 'message' : 'hey sorry, I need a subject to process this'}, {...}]},并在POST数据时添加状态回复。

检查示例数据库和书籍。