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

时间:2011-01-25 01:34:17

标签: java javascript model-view-controller jsp

我在堆栈溢出过程中看到了这个问题的一些变体,但是我有一个特定的用例,我想要输入。

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

所以,我需要能够在客户端tab-out(简单,简单的Javascript)上呈现第二个禁用字段,并且当这个“表单”被第一次加载时(简单,在JSP中操作字段的属性时)已加载)。

但是......我最终在两个地方完成了相同的逻辑编码。现在,考虑到这需要数百个字段和数十个逻辑条件,有时像5个字段的组合一样复杂,要做这个或那个特定值的集合等等。

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

由于

2 个答案:

答案 0 :(得分:0)

基于组件的MVC框架(如JSF(JavaServer Faces))允许您在一个位置定义它。以下是特定用例的启动示例:

<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代码,该代码将在服务器端和客户端执行。唯一的缺点可能是学习曲线和现有页面的大量变化。

答案 1 :(得分:0)

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

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

客户端验证的替代(实际上是'除了')是在表单字段被POST到服务器时验证它们。检查客户端是否实际遵守了您的验证规则(例如,他们可能会禁用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 );
});