Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.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_Jquery_Jsp_Jakarta Ee_Struts2 - Fatal编程技术网

Java 如何提交表格?

Java 如何提交表格?,java,jquery,jsp,jakarta-ee,struts2,Java,Jquery,Jsp,Jakarta Ee,Struts2,我有一个有许多不同字段的表单,这个表单的字段与两个表相关联, 提交表单后,我应该如何仅更新受影响的表 表凭证 ID username password question answer 表用户 ID name surname age CredentialID 假设用户只是更新他/她的名字。提交表单后,我只需要更新用户表的名称字段,而不是凭证表的任何字段,因为其关联字段尚未更改。我知道一种方法是用类检查提交的值,还有其他选择吗? 我不想更新所有值以提高性能

我有一个有许多不同字段的表单,这个表单的字段与两个表相关联, 提交表单后,我应该如何仅更新受影响的表

表凭证

ID
username
password
question
answer
表用户

    ID
    name
    surname
    age
    CredentialID
假设用户只是更新他/她的名字。提交表单后,我只需要更新用户表的名称字段,而不是凭证表的任何字段,因为其关联字段尚未更改。我知道一种方法是用类检查提交的值,还有其他选择吗? 我不想更新所有值以提高性能和降低数据库成本的原因。此外,有没有办法在客户端进行比较?我正在使用prepareStatement更新数据库

阶级

形式


... 名称
姓
年龄
用户名
密码
问题
回答。。。

您有以下选择:

  • 维护一个隐藏字段,该字段包含与文本字段相同的值,提交表单时,将文本框值与隐藏值进行比较,并相应地更新表,即如果输入的用户名与隐藏用户名值不匹配,则仅更改凭证表

  • 如果它是一个类似于更新用户信息的表单,那么最好将每个字段集放在单独的表单中

  • 我知道一种方法是用类检查提交的值,还有其他选择吗

    对我来说,似乎你们知道你们可以在服务器端通过比较你们类的所有新变量和旧变量来检查这一点,但你们希望有一个更快、更少的资源密集型方法

    因此,我的基本想法是,客户端(浏览器)需要检查“组”(凭证或用户)的值是否已更改,并将此信息提交给服务器。我不确定使用Struts时的HTML标记,但基本上是这样的:

    <form>
       <!-- credential fields -->
       <input type="text" name="username" id="username" onchange="credentialChanged()"/>
       <input type="text" name="question" id="question" onchange="credentialChanged()" />
       ...
       <!-- indicates the server if credential fields have changed -->
       <input type="hidden" name="credential-changed" 
              id="credential-changed" value="false" />
    
       <!-- uer fields -->
       <input type="text" name="name" id="name" onchange="userChanged()"/>
       <input type="text" name="surname" id="surname" onchange="userChanged()"/>
       ...
       <!-- indicates the server if user fields have changed -->
       <input type="hidden" name="user-changed" 
              id="user-changed" value="false" />
    </form>
    
    在服务器端,您可以获取隐藏字段的值,并知道这些值是否已更改


    注意:如果用户将字段的值(例如)从“UserXYZ”更改为“UserABC”,然后将其更改回“UserXYZ”,则相应隐藏字段的值将设置为true。您必须添加额外的Javascript来比较客户端上的新旧值,但想法应该很清楚。

    更新那些未更改的值不会有什么区别,因为相同的值将被覆盖。这就是您从表单中检索值的方式吗?这些表之间是否存在任何关系?您如何更新数据库?你在用hibernate/JPA还是别的什么?@Umeshawashi,我在用preparestatement@PSR,问题是更新如果我选择第二个选项,那么每个表都会有一个提交按钮,对吗?那么如果我有10个表格呢?那么我认为第一个选项应该和提交表格之前一样好,它将确定应该谈论哪个表格。我认为第一个方法不是一个好主意,需要很长时间的比较,并且仍然会影响性能,我认为应该在客户端而不是服务器端执行某些操作。请尝试以下操作:
    函数form1FieldChaged(){form1Changed=true;}函数form2FieldChaged(){form2Changed=true;}函数submit-form(){if(form1Changed==true){updatetable1}否则if(form2Changed==true){updatetable2}
      <s:form action="register" method="POST">
       ... name
       surname
       age
       username
       password
       question
       answer ...
     </s:form>
    
    <form>
       <!-- credential fields -->
       <input type="text" name="username" id="username" onchange="credentialChanged()"/>
       <input type="text" name="question" id="question" onchange="credentialChanged()" />
       ...
       <!-- indicates the server if credential fields have changed -->
       <input type="hidden" name="credential-changed" 
              id="credential-changed" value="false" />
    
       <!-- uer fields -->
       <input type="text" name="name" id="name" onchange="userChanged()"/>
       <input type="text" name="surname" id="surname" onchange="userChanged()"/>
       ...
       <!-- indicates the server if user fields have changed -->
       <input type="hidden" name="user-changed" 
              id="user-changed" value="false" />
    </form>
    
    function credentialChanged(){
      document.getElementById("credential-changed").value = "true";
    }
    
    function userChanged(){
      document.getElementById("user-changed").value = "true";
    }