Java 在Struts 2中,只更新表单中的单个字段,其他信息保持不变
这里我想更新我现有的信息,但是每当我更新数据时,所有与特定代码相关的数据都会更新 但我不想这样,假设我只想更新密码,所以在我输入密码的表单中,只有密码应该更新,其他信息应该保持不变Java 在Struts 2中,只更新表单中的单个字段,其他信息保持不变,java,jsp,jdbc,struts2,Java,Jsp,Jdbc,Struts2,这里我想更新我现有的信息,但是每当我更新数据时,所有与特定代码相关的数据都会更新 但我不想这样,假设我只想更新密码,所以在我输入密码的表单中,只有密码应该更新,其他信息应该保持不变 但这不会发生,如果我只更新一个字段,其他字段将变为空白。那么解决方案是什么呢?您需要扩展ParameterNameAware并实现acceptableParameterName。在这种方法中,您可以获得输入参数的名称,您可以通过返回true来接受它,或者通过返回false来拒绝它 可以在以下位置找到示例:我得到了您想
但这不会发生,如果我只更新一个字段,其他字段将变为空白。那么解决方案是什么呢?您需要扩展
ParameterNameAware
并实现acceptableParameterName
。在这种方法中,您可以获得输入参数的名称,您可以通过返回true
来接受它,或者通过返回false
来拒绝它
可以在以下位置找到示例:我得到了您想要的,您想要更改只返回指定电子邮件的一条记录的查询。电子邮件在表中应该是唯一的
package org.entity;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import com.opensymphony.xwork2.ActionSupport;
public class BloodBankEditAction extends ActionSupport {
BloodBankEdit bupdate;
public BloodBankEditAction() {
// TODO Auto-generated constructor stub
}
public BloodBankEdit getBupdate() {
return bupdate;
}
public void setBupdate(BloodBankEdit bupdate) {
this.bupdate = bupdate;
}
@Override
public String execute() throws Exception {
try {
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/foryou", "root", "siddheshkk");
System.out.println("Driver Loaded");
PreparedStatement st = con
.prepareStatement("Update bbinfo SET name=?,address=?,city=?,district=?,contactno=?,password=?,aname=?,email=? where code=?");
st.setString(9, bupdate.getCode());
st.setString(1, bupdate.getName());
st.setString(2, bupdate.getAddress());
st.setString(3, bupdate.getCity());
st.setString(4, bupdate.getDistrict());
st.setString(5, bupdate.getNumber());
st.setString(6, bupdate.getPassword());
st.setString(7, bupdate.getAname());
st.setString(8, bupdate.getEmail());
System.out.println("Executed");
st.executeUpdate();
PreparedStatement st1 = con
.prepareStatement("Update stockinfo SET name=?,city=?,address=?,contact=?,email=? where code=?");
st1.setString(1, bupdate.getName());
st1.setString(2, bupdate.getCity());
st1.setString(3, bupdate.getAddress());
st1.setString(4, bupdate.getNumber());
st1.setString(5, bupdate.getEmail());
st1.setString(6, bupdate.getCode());
st1.executeUpdate();
System.out.println("Done");
} catch (Exception e) {
System.out.println(e);
}
return "success";
}
@Override
public void validate() {
// TODO Auto-generated method stub
super.validate();
if (!(bupdate.getConfirm().equals(bupdate.getPassword()))) {
addFieldError("bupdate.confirm", "Password doesnt match");
}
}
}
我如何实现这一点?你能给我的代码或链接,我可以了解吗?不,它没有安全漏洞:-),最新版本已硬编码排除参数,具有更高的优先级。所以给我正确的链接,我可以研究?有人吗?这里我想更新我现有的信息,但是每当我更新数据时,所有与特定代码相关的数据都会更新。但是我不想这样,假设我只想更新密码,所以在我输入密码的表单中,只有密码应该更新,其他信息应该保持不变。但这不会发生,如果我只更新一个字段,其他字段将变为空白。那么解决这个问题的方法是什么呢?除非您输入正确的数据,否则不会更新与特定代码相关的数据。如果您只想更新密码,那么您应该创建一个只返回密码进行更新的查询。
PreparedStatement st = con
.prepareStatement("Update bbinfo SET name=?,address=?,city=?,district=?,contactno=?,password=?,aname=?,code=? where email=?");
st.setString(1, bupdate.getName());
st.setString(2, bupdate.getAddress());
st.setString(3, bupdate.getCity());
st.setString(4, bupdate.getDistrict());
st.setString(5, bupdate.getNumber());
st.setString(6, bupdate.getPassword());
st.setString(7, bupdate.getAname());
st.setString(8, bupdate.getCode());
st.setString(9, bupdate.getEmail());
System.out.println("Executed");
st.executeUpdate();