在Lift web框架中,是否可以创建通过AJAX进行响应但也可以在不支持Javascript的情况下工作的表单(和链接)?如果是,怎么做
当我使用构建表单时<;lift:form.ajax>,表单的操作被设置为javascript://,因此它不再在没有JS的情况下提交。如果我构建表单时没有明确的AJAX支持,我不知道如何插入AJAX功能
我想我可以构建一个RESTful接口(无论如何我们都必须构建它),然后编写定制Javascript来提交表单。不过,我希望避免代码重复:如果可以用相同的代码处理所有三个输入(RESTful、传统HTTP POST、AJAX),那就最好了
看看http://demo.liftweb.net/form_ajax
FormWithAjax.scala
类FormWithAjax扩展了StatefulSnippet{
private var firstName=“”
private var lastName=“”
private val from=S.referer openOr“/”
def调度={
案例=>;呈现_
}
def render(xhtml:NodeSeq):NodeSeq=
{
def validate(){
(firstName.length,lastName.length)匹配{
如果f<;2&;n<;2=>;S.错误(“名字和姓氏太短”),则为案例(f,n)
如果f<;2=>;S.error(“名字太短”),则为案例(f,41;
如果n<;2=>;S.error(“姓氏太短”),则为大小写(uu,n)
case=>;S.notice(“谢谢!”);S.redirectTo(from)
}
}
绑定(“表单”,xhtml,
“first”->;textAjaxTest(firstName,s=>;firstName=s,s=>;{s.notice(“first name”+s);Noop}),
“last”->;textAjaxTest(lastName,s=>;lastName=s,s=>;{s.notice(“lastName”+s);Noop}),
“提交”->;提交(“发送”,验证)
)
}
form_ajax.html
<;提升:用=“default”at=“content”环绕;
输入您的姓名:<;br>;
<;form class=“lift:FormWithAjax?form=post”>;
名字:<;形式:第一>;<;/form:First>;
姓氏:<;格式:Last>;<;/form:Last>;
<;表格:提交>;<;/form:submit>;
<;/form>;
<;/lift:环绕>;
这将在没有javascript的情况下工作:
<;form action=“/form\u ajax”method=“post”>;
<;input name=“F1069091373793VHXH01”type=“hidden”value=“true”>;
名字:<;input value=“”type=“text”Name=“F1069091373788OVAAWQ”onblur=“liftAjax.lift\u ajaxHandler('f10690913789n2ao0c='”+encodeURIComponent(this.value),null,null,null)”>;
姓氏:<;input value=“”type=“text”Name=“F1069091373790VANYVT”onblur=“liftAjax.lift_ajaxHandler('f10690913791cjmqdy='”+encodeURIComponent(this.value),null,null,null)”>;
<;input name=“F1069091383792JGBYWE”type=“submit”value=“Send”>;
<;/form>;