【问题标题】:Unable to get data input in the jsp, from jsp to a form, using logic:iterate无法在jsp中获取数据输入,从jsp到表单,使用逻辑:迭代
【发布时间】:2015-04-14 10:08:22
【问题描述】:

主要问题是我使用的是 Struts 1.0.2。但我无法改变它。 我在我的 jsp 中使用 arraylist 的属性时遇到问题。显示工作正常,但我没有在我的表单中的 arraylist 中实例化数据。在调试模式下,我发现它永远不会涉及到我的属性的 getter。我在 struts 1.0 中找到了 2 个解决方案,但我无法使其工作。

我的 ActionForm 中的数组列表:

private ArrayList<AccountScreenBean> accountsScreen = new ArrayList<AccountScreenBean>();

Arraylist中Account对象的类声明:

public class Account implements Serializable, Cloneable {
    private String bic;

    public String getBic() {
        return bic;
    }

    public void setBic(final String newBic) {
        bic = newBic;
    }
}

我的jsp中的调用:

<logic:iterate name="BankAccountsActionForm" property="accountsScreen" id="accScreen" indexId="index">
<html:text name="accScreen" property="<%="accountsScreen["+index+"].bic"%>" size="18" maxlength="11" onkeyup="suivant(this,'partPays',11,'accScreen')"
                                 styleClass="inscCB_SaisieTexte" />
</logic:iterate>

控制台错误:

weblogic.servlet.jsp.CompilationException: 编译 JSP 失败 /jsp/Contents/bankAccountsContent.jsp bankAccountsContent.jsp:171:81: 无法识别此属性。 " 尺寸="18" maxlength="11"。

accountsScreen 加下划线

我还在我的 jsp 中尝试了另一种方式:

<html:text name="accScreen" property="accountsScreen[${index}].bic" size="18" maxlength="11"
                                 onkeyup="suivant(this,'partPays',11,'accScreen')"
                                 styleClass="inscCB_SaisieTexte" />

这次控制台错误是:

java.lang.IllegalArgumentException:无效的索引属性 'accountsScreen[${index}]'

您有解决这些问题的方法或其他方法吗?

【问题讨论】:

  • 尝试使用单引号 - property='&lt;%="accountsScreen["+index+"].bic"%&gt;'
  • 它没有更好的工作但它不是同样的错误:'javax.servlet.jsp.JspException:没有属性accountsScreen [1] .bic的bean accScreen'的getter方法。 accountsScreen 是服务器端名称, bic 有一个遵循标准规则的 getter。但是 accScreen 是 jsp 名称(在 struts 逻辑迭代中),也许它是一个线索。
  • 表示这个语法是正确的,需要修正名字。
  • 我尝试了一些变化,但我找不到我缺少的东西。

标签: java jsp struts-1 taglib


【解决方案1】:

Aleksandr M 帮助我找到最终解决方案的线索。事实上,我需要使用简单的引号而不是双引号。然后是对 accountsScreen 属性的访问问题,因为它不是并且已编入索引。最后我需要 2 个不同的 getter 名称,即使参数不一样。所以我将索引前缀添加到索引 getter。

在jsp中:

<html:text name="BankAccountsActionForm" property='<%="indexedAccountsScreen["+index+ "].partAccountNumber2"%>'

在Java 表单中,我需要一个索引属性来访问accountScreen ArrayList 的元素。所以我有 getter 通过 Index 访问元素:

public void setAccountsScreen(int index, AccountScreenBean accScreen) {
    this.accountsScreen.add(index, accScreen);
}
public AccountScreenBean getIndexedAccountsScreen(int index) {
    return accountsScreen.get(index);
}

谢谢大家。

【讨论】:

    【解决方案2】:

    我认为您的第一个“解决方法”的问题是 &lt;% %&gt; 魔术,因为引号。而且这似乎也没有必要,因为您应该已经在accScreen 中有索引元素。 我会试试的

    <logic:iterate name="BankAccountsActionForm" property="accountsScreen" id="accScreen" indexId="index">
        <html:text name="accScreen" property="bic" etc="..." />
    </logic:iterate>
    

    改为。

    【讨论】:

    • 其实这是我的第一枪。没有任何控制台错误,但未设置输入值。但我认为它适用于更高版本的 struts,至少可以说 1.2。
    • 奇怪。这是它甚至不调用getter的情况还是另一个?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-26
    • 2013-04-29
    • 1970-01-01
    • 2012-09-01
    • 2018-11-24
    • 1970-01-01
    • 2021-05-02
    相关资源
    最近更新 更多