【问题标题】:Populating checkboxes from ArrayList of Objects in Struts 2在 Struts 2 中从对象的 ArrayList 填充复选框
【发布时间】:2013-11-09 15:18:36
【问题描述】:

我确定我在做一些愚蠢的事情,但在过去的几天里,我一直在尝试让我的 复选框 在迭代器中填写,该迭代器通过 @987654321 @Object

这是我的对象:

public class EmailObject {
int emailId;
String emailAddress;

public int getEmailId() {
    return emailId;
}
public void setEmailId(int emailId) {
    this.emailId = emailId;
}
public String getEmailAddress() {
    return emailAddress;
}
public void setEmailAddress(String emailAddress) {
    this.emailAddress = emailAddress;
}
}

在我的动作类中,我创建了上述EmailObjects 的ArrayList

在我的 JSP 页面上,我可以通过 checkboxlist 获取复选框(但这对我不利,因为我希望它是垂直的并且不想与 Struts 样式混淆)

<s:checkboxlist name="selectedEmails" list="userEmails" listValue="emailAddress" listKey="emailId" />

我还可以遍历 ArrayList userEmails 并显示值:

<s:iterator value="userEmails" var="thisEmailData">
<s:property value="emailId"/>
<s:property value="emailAddress"/>
</s:iterator>

但是当迭代ArrayList userEmails 时,我无法让它显示emailId。我尝试了所有这些:

    <s:iterator value="userEmails" var="thisEmailData">
<tr><td><s:property value="emailId"/></td></tr>

<tr><td>
    <s:checkbox fieldValue="%{#emailId}" name="emailAddressesCB"   theme="simple"  ></s:checkbox>
    <s:checkbox fieldValue="#emailId" name="emailAddressesCB"   theme="simple" ></s:checkbox>
    <s:checkbox fieldValue="thisEmailData.emailId" name="emailAddressesCB"   theme="simple" ></s:checkbox>
    <s:checkbox fieldValue="userEmails.emailId" name="emailAddressesCB"   theme="simple" ></s:checkbox>
    <s:checkbox fieldValue="#thisEmailData.emailId" name="emailAddressesCB"   theme="simple" ></s:checkbox>
    <s:checkbox fieldValue="#userEmails.emailId" name="emailAddressesCB"   theme="simple" ></s:checkbox>
    <s:checkbox fieldValue="%{#thisEmailData.emailId}" name="emailAddressesCB"   theme="simple" ></s:checkbox>
    <s:checkbox fieldValue="%{#userEmails.emailId}" name="emailAddressesCB"   theme="simple" ></s:checkbox>
    <s:checkbox fieldValue="emailId" name="emailAddressesCB"   theme="simple"  ></s:checkbox>
    
    <s:checkbox value="%{#emailId}" name="emailAddressesCB"   theme="simple"  ></s:checkbox>
    <s:checkbox value="#emailId" name="emailAddressesCB"   theme="simple" ></s:checkbox>
    <s:checkbox value="thisEmailData.emailId" name="emailAddressesCB"   theme="simple" ></s:checkbox>
    <s:checkbox value="userEmails.emailId" name="emailAddressesCB"   theme="simple" ></s:checkbox>
    <s:checkbox value="#thisEmailData.emailId" name="emailAddressesCB"   theme="simple" ></s:checkbox>
    <s:checkbox value="#userEmails.emailId" name="emailAddressesCB"   theme="simple" ></s:checkbox>
    <s:checkbox value="%{#thisEmailData.emailId}" name="emailAddressesCB"   theme="simple" ></s:checkbox>
    <s:checkbox value="%{#userEmails.emailId}" name="emailAddressesCB"   theme="simple" ></s:checkbox>
    <s:checkbox value="emailId" name="emailAddressesCB"   theme="simple"  >
     </s:checkbox>
     <s:property value="emailAddress"/>
</td></tr>
</s:iterator>
</td></tr>
</s:iterator>

从上面看,值字段永远不会被emailId 的值填充。

我知道我缺少一些基本的东西。这是什么?

【问题讨论】:

  • 你能发布你的 Action 课程吗?

标签: java jsp checkbox struts2 ognl


【解决方案1】:

您可以执行以下操作。

<s:iterator value="EmailObjects">       
<s:checkbox name="emailAddressess"  fieldValue="%{emailAddress}" 
label="%{emailId}" >
</s:checkbox>
</s:iterator>

【讨论】:

    【解决方案2】:

    尝试在操作类中使用哈希图。示例

    Hashmap<int,String> emailobjMap = new Hashmap<int,String>()
        emailobjMap.put(emailId,emailAddress);
        request.setAttribute(EMAILIST, emailobjMap); 
    

    并且在你的jsp文件中使用jstl标签库-

    <g:forEach var="list" items="${EMAILIST}">`
    
        <g:out value="${list.key}" />
        <g:out value="${list.value}" />
    </g>
    

    【讨论】:

    • 非常感谢,但这似乎是一种相当迂回的做法。
    【解决方案3】:

    您忘记了与复选框相对应的简单含义。复选框只有选中或未选中两种状态。如果选中复选框,则将 checked="checked" 添加到 input 标记中,如果取消选中则删除。您认为哪种数据类型变量适合表示这些状态?我想你明白了,它是一个布尔类型。现在让我们看一下struts 站点上复选框标记的example。他们说value="aBoolean"。不幸的是,这需要更多描述,例如

    Boolean aBoolean; 
    

    此变量通过 OGNL 进行评估,如果它具有 true 值,则添加 checked="checked" 并且您可以看到复选符号,否则删除。

    【讨论】:

    • 那么你是说struts 不支持像标准html 那样为复选框添加值吗?例如:code红色
      蓝色
      code 使用复选框列表肯定会在复选框的值字段中提供唯一的 emailIds(就像普通的 html 一样)
    • Checked 是一个标准参数,具有真或假值,但我相信它仅用于预填充复选框。提交时,选中复选框的多个值会在帖子或查询字符串中返回。
    • 如果您有多个具有相同name 的复选框并且它涉及任何形式的input 元素,则会返回多个值。 HTML 中的value 对应struts 中的fieldValue。关于checked上面我已经写过了。
    • 谢谢 Roman,我同意,从我以前的 Perl 时代开始,复选框就一直这样工作。我的问题是如何通过迭代器获取复选框中设置的字段值。当仅将属性用作 emailId 时,它在复选框之外显示为 OK,但是当将其放入 fieldvalue 复选框参数时,它不起作用。在 checkboxLIST 标记中,它也可以作为 emailId 查找,因此这些值肯定会传递到页面上。
    • name属性对应的字段中提交表单即可获取。因为struts渲染HTML之后fieldvalue就变成了value。如果你想在 struts 的 value 属性中取回它,则在 fieldvalue 中放置一个布尔值,而不是表示该值的状态。说如果你有“红色”、“绿色”、“蓝色”值应该检查哪些?
    猜你喜欢
    • 2013-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-26
    • 1970-01-01
    • 1970-01-01
    • 2017-01-18
    相关资源
    最近更新 更多