2012-09-13 57 views
2

我想做什么:从Servlet的发送信息,以JSP

我有很多领域(昵称,电子邮件,名字,姓氏等)的形式,但用户必须填写尼克和首先发送电子邮件是为了能够填写其他字段(这是因为我们希望检查其他客户没有使用昵称和邮件,然后才能介绍他的其他信息(名称,姓氏等) )。 因此,用户引入了Nick和Email,然后他必须按下一个名为“Validate”的按钮,如果这些值可用(成功验证),那么其余的字段被启用并且用户可以继续填写表单,否则字段保持禁用状态并向用户显示错误。

表单将位于一个JSP中,它将被提交给一个Servlet,一旦在servlet中我必须验证表单中的信息(我有一个包含在此servlet中的.JAR文件,验证包含在从库中调用函数时,该函数返回一个布尔值),然后我必须返回到相同的JSP表示验证函数结果的布尔值。 现在在JSP中,我必须启用(或不根据布尔值的值)其余的TextFields。

我不确定这是否正确,但我试图用按钮提交,同时运行一个javascript(onclick),它将使用此布尔值,该servlet在创建后返回给JSP验证。 javascript包含一个评估布尔值的IF语句,如果它是true,那么它将启用JSP上的所有字段。

问题至今:

我能够从JSP发送尼克和电子邮件到Servlet和使值的验证,现在我有布尔,但我对如何不知道将它从Servlet发送到同一个JSP,并在用于提交信息的同一个按钮的onclick事件中使用它。我甚至不知道是否有可能这样做...

如果有人能帮我一个忙,我很感激,我是Java编程的新手,所以如果可能,我会很感激简单的解释。 此外,如果有更好的方式做我想做的事情,请分享一下,如果有任何疑问,我会尽力更好地解释它。

回答

0

我认为AJAX更适合您的应用程序,它不需要提交整个表单,您可以发送验证标志为普通responseText或格式良好的responseXML。你也可以使用很多很好的javascript库,例如jQuery,它可以帮助你快速简单地发送AJAX请求。

+0

感谢您的回答。 无论如何,我不想使用AJAX,因为我对它一无所知,并且我有时间限制来开发此应用程序。因此我不知道是否专门花时间从零开始研究AJAX是个好主意。 – Simpson

+0

好的,那么对于您的情况,您仍然可能会转回到同一页面(URL)并在URL中附加验证标志(Y/N),例如:“?validatedOK = Y”。 –

1

正如Roy提到的AJAX最适合您的问题。您可以使用DWR! ,它使正常的java类作为AJAX服务可用,只需调用它们的方法并获得结果即可。太简单。

2

根本不需要JavaScript。

在你的servlet,你可以验证结果存储到请求上下文:

req.setAttribute('checkResult', checkResult); 

其中reqHttpServletRequest型和checkResultBoolean

然后你可以转发给你的JSP:

RequestDispatcher dispatcher = req.getRequestDispatcher("/your.jsp"); 
dispatcher.forward(req, resp); 

在JSP中你可以设置你的表单元素,因为只有这取决于您放入请求上下文属性checkResult阅读:

<textarea name="text" cols="50" rows="10" 
    <%= request.getAttribute("checkResult") != null && request.getAttribute("checkResult") ? "" : "readonly" %> 
>...</textarea> 

因此,如果检查无效,那么<textarea>元素将包含readonly属性。否则readonly不存在。

+0

您好,感谢您的建议,这似乎是一个很好的解决方案,但我遇到了以下问题: <%= request.getAttribute(“checkResult”)!= null && request.getAttribute(“checkResult”)? “”:“只读”%> 我不明白,“?”是什么意思?和“:”呢? 我得到该行中的错误:“运算符&&是未定义的参数类型(s)布尔值,对象” – Simpson

+0

对不起,你是对的。 getAttribute()返回Object,所以你必须将它转换为布尔值。之前的部分?必须是:request.getAttribute(“checkResult”)!= null &&((Boolean)request.getAttribute(“checkResult”))。这是三元运算符的条件(请参阅http://en.wikipedia.org/wiki/%3F:#Java)。如果在请求上下文中设置了属性“checkResult”并且布尔值为true,那么它的计算结果为true。在?之后有两个值。如果条件为真,冒号前的第一个是三元表达式的值。 – vanje

+0

如果条件为假,则三元表达式计算为冒号后的值。所以整个<%= ... %>部分的结果是空字符串,如果checkResult属性设置为true。如果checkResult属性不存在于请求上下文中或设置为false,则字符串为“只读”。 – vanje