我是扩展库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>
答案 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数据时添加状态回复。
检查示例数据库和书籍。