Action result error: "The local variable success may not have been initialized."
Action result error: "The local variable success may not have been initialized."
“未解决的编译问题:局部变量输入可能尚未初始化局部变量成功可能尚未初始化局部变量输入可能尚未初始化”我一直在尝试用 3 个输入填充我的数据库,我我对 MySQl 的 struts2 框架非常陌生,因此任何类型的见解或意见都会非常有帮助。我是否包含了足够的代码信息?这是我的 ActionClass。
<pre> package com.tutorialspoint.struts2;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import com.opensymphony.xwork2.ActionSupport;
public class HelloWorldAction extends ActionSupport{
private String osName;
private String version;
private String notes;
public String execute() throws Exception {
String input;
String success;
String ret = input;
Connection conn = null;
try{
String URL = "jdbc:mysql://localhost/HelloWorld";
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(URL, "root", "");
String sql = "SELECT osName FROM entry WHERE";
sql+=" osName = ? AND version = ?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, osName);
ps.setString(2, version);
ResultSet rs = ps.executeQuery();
while (rs.next()) {
notes = rs.getString(1);
ret = success;
}
}catch (Exception e) {
ret = input;
} finally {
if (conn != null) {
try {
conn.close();
} catch (Exception e) {
}
}
}
return ret;
}
public String getOsName() {
return osName;
}
public void setOsName(String osName) {
this.osName = osName;
}
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
public String getNotes() {
return notes;
}
public void setNotes(String notes) {
this.notes = notes;
}
public void validate()
{
if (osName == null || osName.trim().equals(""))
{
addFieldError("osName","The OS name is required");
}
if (version == null || version.trim().equals(""))
{
addFieldError("version","The OS version is required");
}
}
}
您的 input
和 success
是局部变量,没有默认值。当您点击行 ret = input
时,您还没有在 input
中输入任何内容,因此该赋值没有任何意义。 ret = success
也一样;您永远不会在方法中的任何地方为 success
分配任何值。
SUCCESS
、ERROR
、INPUT
、NONE
和 LOGIN
是 the Action
interface 中定义的预定义框架常量,由 ActionSupport
class,你的行动延伸了。
因此,抛开您没有初始化变量的事实不谈(您应该做的是:
private String success = "success";
private String input = "input";
), 它们是绝对不需要的,因为你可以 return 常量值:
ret = SUCCESS;
...
ret = INPUT;
或者,当不扩展 ActionSupport 时,字面值:
ret = "success";
...
ret = "input";
最好使用常量来避免拼写错误。
“未解决的编译问题:局部变量输入可能尚未初始化局部变量成功可能尚未初始化局部变量输入可能尚未初始化”我一直在尝试用 3 个输入填充我的数据库,我我对 MySQl 的 struts2 框架非常陌生,因此任何类型的见解或意见都会非常有帮助。我是否包含了足够的代码信息?这是我的 ActionClass。
<pre> package com.tutorialspoint.struts2;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import com.opensymphony.xwork2.ActionSupport;
public class HelloWorldAction extends ActionSupport{
private String osName;
private String version;
private String notes;
public String execute() throws Exception {
String input;
String success;
String ret = input;
Connection conn = null;
try{
String URL = "jdbc:mysql://localhost/HelloWorld";
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(URL, "root", "");
String sql = "SELECT osName FROM entry WHERE";
sql+=" osName = ? AND version = ?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, osName);
ps.setString(2, version);
ResultSet rs = ps.executeQuery();
while (rs.next()) {
notes = rs.getString(1);
ret = success;
}
}catch (Exception e) {
ret = input;
} finally {
if (conn != null) {
try {
conn.close();
} catch (Exception e) {
}
}
}
return ret;
}
public String getOsName() {
return osName;
}
public void setOsName(String osName) {
this.osName = osName;
}
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
public String getNotes() {
return notes;
}
public void setNotes(String notes) {
this.notes = notes;
}
public void validate()
{
if (osName == null || osName.trim().equals(""))
{
addFieldError("osName","The OS name is required");
}
if (version == null || version.trim().equals(""))
{
addFieldError("version","The OS version is required");
}
}
}
您的 input
和 success
是局部变量,没有默认值。当您点击行 ret = input
时,您还没有在 input
中输入任何内容,因此该赋值没有任何意义。 ret = success
也一样;您永远不会在方法中的任何地方为 success
分配任何值。
SUCCESS
、ERROR
、INPUT
、NONE
和 LOGIN
是 the Action
interface 中定义的预定义框架常量,由 ActionSupport
class,你的行动延伸了。
因此,抛开您没有初始化变量的事实不谈(您应该做的是:
private String success = "success";
private String input = "input";
), 它们是绝对不需要的,因为你可以 return 常量值:
ret = SUCCESS;
...
ret = INPUT;
或者,当不扩展 ActionSupport 时,字面值:
ret = "success";
...
ret = "input";
最好使用常量来避免拼写错误。