【问题标题】:How to get Unique ID for a group of dropDowns generated by a loop?如何获取循环生成的一组下拉列表的唯一 ID?
【发布时间】:2015-08-27 04:23:38
【问题描述】:

请帮我解决以下问题。

代码:

<%for(int ind=0;ind<15;ind++){%>

 <tr>
   <struts-el:select name="OpEnh01pagSincomModelMaintanenceFormBean" property="mdlCode" styleId="mdlDrpDown_+'<%=ind %>'" onchange="modelCodeChanged(this.id)">
     <struts-el:options collection="listmodelCodes" property="modelCode" labelProperty="modelCodeDesc" />
   </struts-el:select> 
 </tr>

<%}%>

1) 我想要 15 行中的 15 个下拉菜单。我想要 dropDown 的索引来识别 JavaScript 中修改了哪个 dropDown。

2) 我想获得一个唯一的 id,以便我可以使用 onChangeEvent 调用的 JavaScript 中的 dom 访问它。

我有一个表单bean的名称属性mdlDrpDown1、mdlDrpDown2等等..

我尝试了这种格式:styleId="mdlDrpDown_+'&lt;%=ind %&gt;'" 但无法将其作为 styleId,property 属性不是 runTimeExpr。

【问题讨论】:

  • onchange 通过 this.id 但没有设置 id 属性。
  • 其实在生成的html中。 “styleId”属性转换为“id”属性。因此我使用 this.id 作为 JS 的参数。但我的主要问题是我无法在属性或 StyleID 属性中获取 loopIndex。

标签: javascript jsp struts-1 scriptlet struts-tags


【解决方案1】:

您使用动态属性名称mdlCode&lt;%=ind %&gt; 为select,如果在formbean 中找不到getter 和setter,则No getter method Exception will be raised,为避免这种情况,我们可以index based properties(它可以根据索引保存多个值, index 值将元素的顺序出现在页面中)而不是single properties(只能保存一个值)。

试试下面的代码:

FormBean:

//create getter and setter for `mdlCode` using String[], so it can hold dynamic values.

String[] mdlCode;

public String[] getMdlCode() {
   return mdlCode;
}
public void setMdlCode(String[] mdlCode) {
   this.mdlCode=mdlCode;
}

JSP:

<%for(int ind=0;ind<15;ind++) {
    String id = "mdlDrpDown_"+ind;
%>

<tr>
    <!-- change property from `property="mdlCode<%=ind %>"` to property='mdlCode' -->
    <struts-el:select name="OpEnh01pagSincomModelMaintanenceFormBean" property="mdlCode" styleId="<%=id %>" onchange="modelCodeChanged(this.id)">
        <struts-el:options collection="listmodelCodes" property="modelCode" labelProperty="modelCodeDesc" />
    </struts-el:select> 
</tr>

<%}%>

【讨论】:

  • 我尝试并得到错误:JSPG0124E:自定义标签属性 styleId 不能是运行时表达式。值:“[%=id %]”
  • 现在我更改了 styleId="const" a constant >> 页面加载,现在为所有选择元素生成的 html 有:name="mdlCode" id ="const" ** 1)property属性的修改没有帮助。 2)styleID **里面不能有任何 rutime 表达式。所以我无法在这里评估 scriptlet 。
  • @SalmanParacha:你能检查一下吗?这个问题与您之前的帖子类似:link
  • @Vishnu300 我厌倦了 struts-1.3 和 tomcat 中的相同代码,它为我工作。您正在使用哪个版本的 strtuts 和服务器?
  • 在您的情况下,为选择标签(id 和名称属性)生成的 html 是什么?使用的版本是 Struts 1.1 和 IBM WAS 6.1。
【解决方案2】:

你的 styleId 的格式会产生像这样的 id:

id="mdlDrpDown_+'1'" 
id="mdlDrpDown_+'2'"

你应该这样写styleId:

styleId="mdlDrpDown_<%=ind %>"

那么 id 将是这样的:

id="mdlDrpDown_1" 
id="mdlDrpDown_2"

【讨论】:

  • @ Brijesh:尝试时出错:styleId="mdlDrpDown_" javax.servlet.jsp.JspException:没有可用于 bean 属性 mdlDrpDown_%=ind % 的 getter 方法。 未评估。
  • 然后我尝试了:styleId=""。错误是:JSPG0124E:自定义标记属性 styleId 不能是运行时表达式。 value: "[%=india %]" 在 tld 文件中也是一样的。
  • @Vishnu300 不知道这个异常。但我认为 scriptlet 在这里帮不了你。
  • 是的..我们可以在 pageScope 中保留 scriptlet 变量,然后使用 EL 在此处动态附加索引吗?我对 EL 和 JSTL 知之甚少,所以请在这方面提供帮助..
  • @Vishnu300 正在评估,由于动态属性名称,您会遇到异常,您正在使用 struts select 标签,这意味着您必须在 formbean 类中有 getter 和 setter 方法。
猜你喜欢
  • 2015-12-24
  • 2017-02-11
  • 2012-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多