使用struts的复选框

时间:2012-12-24 15:47:00

标签: struts

您好我愿意更新从JSP上加载的数据库中获取的复选框的值。我正在创建员工档案。 Jsp有字段员工姓名,员工地址,员工技术技能。 员工技能具有以下复选框以选择以下值

Checkbox1:Java Checkbox2:Dot net

对于Employee X,数据库中没有Java和Dot net的计算技能。我能够从数据库中获取记录到JSP。

在动作类中,我从数据库中获取值并将它们设置为具有两个getter和setter的EmployeeForm。我也在请求中使用setattribute设置这些值。

在EmployeeUpdate.jsp中,我正在执行以下操作

String skillsValue1=(String)request.getAttribute("C/C++");
String skillsValue2=(String)request.getAttribute("Java");

 <%if(skillsValue1!=null){ %>
         <html:checkbox property="ComputationalSkill1" value="C/C++"/>                     
           <%}else{ %>
              <html:checkbox property="ComputationalSkill1" value=" "/>  
                 <%}%>
            </td>          

<%if(skillsValue2!=null){ %>
         <html:checkbox property="ComputationalSkill2" value="Java"/>                     
           <%}else{ %>
              <html:checkbox property="ComputationalSkill2" value=" "/>  
                 <%}%>
            </td>  

以下代码完美地显示了具有上述任何技能且没有技能的员工的复选框。

我在这里遇到以下问题

  1. 当我取消选中之前检查过的任何字段的值时,该值在bean中完全设置为null。 但是,当我检查任何字段上的值(之前未检查过)(更新任何字段)时,bean中没有为特定属性设置值,也不为null。
  2. 任何人都可以告诉我如何获取复选框的更改值,例如,当我将状态从取消选中更改为检查状态时,应该在属性中设置值。

1 个答案:

答案 0 :(得分:5)

如果员工具有Java技能,您将显示以下复选框:

<html:checkbox property="ComputationalSkill2" value="Java"/>  

这意味着在提交时,如果选中该复选框,将发送以下参数:

ComputationalSkill2=Java

如果员工没有Java技能,您将显示以下复选框:

<html:checkbox property="ComputationalSkill2" value=" "/>

这意味着在提交时,如果选中该复选框,将发送以下参数:

ComputationalSkill2=<blank space>

您想要的是始终生成相同的复选框(第一个),但如果员工具有技能Java,则预先选择它,如果员工没有Java技能,则不预先选择它。

这是不可能的,因为它使用<html:checkbox>标记,因为它应该绑定到布尔属性。因此,您可以在表单bean中使用属性isJavaSkilled() / setJavaSkilled(),并使用

<html:checkbox property="javaSkilled"/>

如果表单的javaSkilled属性为true,Struts将预先选中该复选框,如果它为false则保持未选中状态。

但请注意,由于您拥有可能存在或不存在的技能列表,因此您应该使用类型为getSkills()的属性setSkills() / String[],并使用{ {1}}标记。