繁体   English   中英

服务器端客户端字段状态更改

[英]server side client side field state altertions

在整个stackoverflow中,我已经看到了这个问题的一些变体,但是我有一个特定的用例,我将为其输入数据。

最简单的方法是:1.在一个网站上,我有一个带有两个输入字段的表单。 当A填充“ XYZ”时,应禁用B,在所有其他情况下,应将其启用。 2.该“页面”也可以由客户端保存到数据库中。

因此,我需要能够在客户端跳出时(简单,简单的Javascript)以及在加载该“表单”时(在页面加载时在JSP中操作字段的属性)都呈现第二个禁用字段。 。

但是...我最终在两个地方编写了完全相同的逻辑。 现在,考虑一下这是数百个字段和数十个逻辑条件所必需的,有时甚至复杂到5个字段组合在一起,执行此操作或该操作的一组特定值等。

最重要的是,您将考虑采用哪种方法(尽可能多地)在服务器端和客户端之间重用(UI)面向UI的验证/字段状态更改(考虑到我不想让每个用户在字段中键入AJAX调用)。

谢谢

像JSF(JavaServer Faces)这样基于组件的MVC框架允许您在一个地方定义它。 这是特定用例的启动示例:

<h:form>
    <h:panelGroup id="inputA">
        <h:inputText value="#{bean.inputA}">
            <f:ajax event="blur" render="inputB" />
        </h:inputText>
    </h:panelGroup>
    <h:panelGroup id="inputB">
        <h:inputText value="#{bean.inputB}" disabled="#{bean.inputA != 'XYZ'}" />
    </h:panelGroup>
</h:form>

基本上就是全部。 仅省略了Javabean代码,但这在这里并不重要。 的确,这里使用了ajax,但这是特别便宜的,而且基本上没有其他方法可以在服务器端和客户端保持相同的状态。

上面的XHTML(Facelets)示例将生成适当的HTML / JS代码,这些代码将在服务器端和客户端均起作用。 唯一的缺点可能是学习曲线和现有页面中的许多更改。

我的答案与BalusC的答案大致相同。

但是首先要澄清一下术语:如果您要做的只是启用/禁用HTML字段,那么我们通常会说这是客户端验证,无论它是在Javascript还是JSP中完成的。 是的,在JSP情况下,禁用/启用字段的逻辑在服务器上运行,但是由于它所做的只是为客户端设置要显示的字段,因此它倾向于落入“客户端验证”的一般描述中

客户端验证的替代方法(实际上是“补充”)是在将表单字段发布到服务器时验证表单字段。 这样可以检查客户端是否确实遵守了您的验证规则(例如,他们可能禁用了javascript,或者他们使用了诸如Firebug之类的工具来重新启用您禁用的字段,等等。)

您可能已经知道所有这些,并且术语并不是超级重要,但是我认为值得指出。

现在,回到您的问题。 我会用javascript完成所有操作,而忽略JSP中的逻辑。 您需要做的就是摘取当它们跳出“ A”时触发的一段javascript,并在页面加载时运行它。

在JQuery中,您会做类似( 未经测试 )的操作

var check_field = function(f)
{
  if(!f) f=$(this);
  if(f.val()=='XYZ') $("#field_B").attr('disabled', true);
  else               $("#field_B").attr('disabled', false);
};
$(function()
{
   var a = $("#field_A");
   check_field(a);
   a.blur( check_field );
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM