Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 服务器端客户端字段状态更改_Java_Javascript_Model View Controller_Jsp - Fatal编程技术网

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

Java 服务器端客户端字段状态更改,java,javascript,model-view-controller,jsp,Java,Javascript,Model View Controller,Jsp,我在stackoverflow中看到了这个问题的一些变化,但我有一个特定的用例,我会推荐它的输入 最简单的方法是: 1.在一个网站上,我有一个带有两个输入字段的表单。使用“XYZ”填充A时,应禁用B,在所有其他情况下,应启用它。 2.客户端也可以将此页面保存到数据库中 因此,我需要能够在client选项卡上呈现第二个禁用字段,这两个字段都是简单的Javascript,当这个表单首次加载时,在JSP中,在加载页面时操作字段的属性 但是。。。我最终在两个地方编码了完全相同的逻辑。现在,认为这是数百个

我在stackoverflow中看到了这个问题的一些变化,但我有一个特定的用例,我会推荐它的输入

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

因此,我需要能够在client选项卡上呈现第二个禁用字段,这两个字段都是简单的Javascript,当这个表单首次加载时,在JSP中,在加载页面时操作字段的属性

但是。。。我最终在两个地方编码了完全相同的逻辑。现在,认为这是数百个字段和几十个逻辑条件所需要的,有时是复杂的,如5个字段的组合,一组特定值来做这个或那个,等等。

底线,你认为在服务器端和客户端之间,尽可能多地重用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中的逻辑。 您所需要做的就是在页面加载时运行一段javascript,当它们从选项卡中弹出时触发

在JQuery中,您可以执行一些类似未测试的操作


谢谢,这是一种无法处理数百个字段的方法,客户端需要等待很长时间才能加载页面。谢谢你的措辞,明白了。但应该注意的是,这是最简单的例子,在现实世界中,它远不止这些,但本质上,它是一组应用于领域的输出,如您所提到的客户端相关。我认为您高估了执行所需的时间。我有一些大型UI做类似的事情,但实际上没有明显的性能影响。您正在为大约100个字段运行几行javascript。这真的不重要。但是如果你已经用另一种方法解决了它,那也很好。谢谢,如果这让我觉得有趣的话,还有什么其他类似于JSF的替代方案呢?其他基于Java组件的框架正在发挥作用!还有小门。我认为Wicket在改变现有HTML页面时破坏性最小。但我不确定它是否像JSF一样支持异步ajax。我从来没用过。
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 );
});