0

我正在使用 Woodstock 组件开发一个 Web 应用程序。简而言之,如果下拉值等于“PRIMARY KEY”,该函数应将表名(来自文本字段)存储到字符串 pk/primaryKey 中。

我目前面临的问题是从该函数获得的结果是:

"abc"

代替

"a, b, c"

为什么会这样?

public void addPK(TextField tf, DropDown dd, StringBuilder pk, int val) {
    if (((String) dd.getValue()).equals("PRIMARY KEY")) {
        if (val == 0) {
            pk.append((String) tf.getValue());
            val++;
        } else {
            pk.append(", " + (String) tf.getValue());
        }
    }
}


public String createButton1_action() {
    StringBuilder primaryKey = new StringBuilder();
    int pkCheck = 0;

    addPK(column_TF1, pkDropDown1, primaryKey, pkCheck);
    addPK(column_TF2, pkDropDown2, primaryKey, pkCheck);
    addPK(column_TF3, pkDropDown3, primaryKey, pkCheck);
    .
    .
}

谢谢你。

4

3 回答 3

3

当您调用方法“addPK”时,pkcheck 值始终为零。S 对于每次调用后增加 pkcheck 值,或者您可以使用您的 stringbuider 长度的值进行欺骗,您可以更改您的方法,例如

选项1。

public void addPK(TextField tf, DropDown dd, StringBuilder pk) {
    if (((String) dd.getValue()).equals("PRIMARY KEY")) {
        if (pk.length()== 0) {
            pk.append((String) tf.getValue());
        } else {
            pk.append(", ").append((String) tf.getValue());
        }
    }
}


选项 2。

public int addPK(TextField tf, DropDown dd, StringBuilder pk, int val) {
    if (((String) dd.getValue()).equals("PRIMARY KEY")) {
        if (val == 0) {
            pk.append((String) tf.getValue());
            val++;
        } else {
            pk.append(", " + (String) tf.getValue());
        }
    }
    return val;
}


public String createButton1_action() {
    StringBuilder primaryKey = new StringBuilder();
    int pkCheck = 0;

    pkCheck = addPK(column_TF1, pkDropDown1, primaryKey, pkCheck);
    pkCheck = addPK(column_TF2, pkDropDown2, primaryKey, pkCheck);
    pkCheck = addPK(column_TF3, pkDropDown3, primaryKey, pkCheck);
    .
    .
}

*如果您使用的是 StringBuilder 或 StringBuffer,最好的做法是使用附加操作而不是 '+' 运算符

pk.append(", " + (String) tf.getValue());

替换为
pk.append(", ").append((String) tf.getValue());*

于 2013-06-26T05:28:57.120 回答
2

因为您要发送值为 0 的 val 参数

  int pkCheck = 0;   

    addPK(column_TF1, pkDropDown1, primaryKey, pkCheck); // value is 0 here

并在 addpK 方法中

if (val == 0) {
    pk.append((String) tf.getValue());
    val++;
}

因此,要获得所需的结果,您需要将 pCheck 的值设置为其他值而不是 0

于 2013-06-26T05:19:20.493 回答
2

你调试了吗?val一直停留0。在您的方法中修改它没有效果。

即执行val++不会改变pkCheck


供参考:java-is-pass-by-value

于 2013-06-26T05:19:56.560 回答