我有一个包含许多不同字段的表单,此表单的字段与两个表相关联, 提交表单后,我该怎么做才更新受影响的表?
表格凭证
ID
username
password
question
answer
表用户
ID
name
surname
age
CredentialID
让我们说用户只需更新他/她的名字。提交表单后,我只需更新用户表的名称字段,而不是更新凭证表的任何字段,因为其关联字段尚未更改。我知道一种方法是检查提交的值与类有没有其他选项? 我不想更新所有值以提高性能和降低数据库成本的原因。而且,是否可以在客户端进行比较?我正在使用prepareStatement来更新数据库。
类
public class User{
ID
CredentialID
name
surname
age
username
password
question
answer
}
形式
<s:form action="register" method="POST">
... name
surname
age
username
password
question
answer ...
</s:form>
答案 0 :(得分:2)
我知道一种方法是检查提交的值是否有其他选项?
对我来说,你似乎知道你可以通过比较你的类的所有新变量和旧变量来检查服务器端,但是你希望有一个更快,资源更少的方法。
所以,我的基本想法是如何实现这一点是客户端(浏览器)需要检查一个&#34; group&#34;的值。 (凭据或用户)已更改并将此信息提交给服务器。我不确定使用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>
然后使用javascript函数credentialChanged()
和userChanged()
更新隐藏字段:
function credentialChanged(){
document.getElementById("credential-changed").value = "true";
}
function userChanged(){
document.getElementById("user-changed").value = "true";
}
在服务器端,您可以获取隐藏字段的值,并知道值是否已更改。
注意:如果用户更改了某个字段,例如来自&#34; UserXYZ&#34;到&#34; UserABC&#34;然后将其更改回&#34; UserXYZ&#34;,相应隐藏字段的值将设置为true。您将不得不添加额外的Javascript来比较客户端的旧值和新值,但这个想法应该是明确的。
答案 1 :(得分:1)
您有以下选择:
维护一个包含与文本字段相同的值的隐藏字段,并在提交表单时将文本框值与隐藏值进行比较,并相应地更新表格,即输入的用户名是否与隐藏的用户名值不匹配,仅更改该凭证表。
如果它是更新用户信息的表单,那么最好将每个单独的字段设置为单独的表单。