2012-12-24 4 views
4

Salut Je suis prêt à mettre à jour la valeur de la case, extraite de la base de données, chargée sur la JSP. Je crée un profil d'employé. Le JSP a des champs Nom de l'employé, Adresse de l'employé, Compétences techniques de l'employé. Les compétences des employés a suivantes pour sélectionner les cases à cocher valeurs suivantesCases à cocher utilisant des entretoises

checkBox1: Java Checkbox2: Dot net

Pour un employé X, N'a pas à la fois les compétences de calcul net Java et Dot dans la base de données. Je suis capable de récupérer l'enregistrement de la base de données à la JSP.

Dans la classe d'action, je récupère les valeurs de la base de données et les place dans le EmployeeForm qui a les deux getters et setters. Je mets ces valeurs en requête aussi avec setattribute.

Dans le EmployeeUpdate.jsp que je fais le

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> 

suivant Le code suivant affiche les cases à cocher parfaitement pour les employés avec l'une des compétences ci-dessus et sans compétences.

Je reçois le problème suivant ici

  1. Quand je décocher la valeur sur un terrain, ce qui a été vérifié auparavant, la valeur est mise à zéro dans la fève parfaitement. Mais lorsque je vérifie la valeur de n'importe quel champ, qui n'a pas été vérifié plus tôt (pour mettre à jour l'un des champs), il n'y a pas de valeur dans le bean pour la propriété particulière, ni null également.

Quelqu'un pourrait-il me faire savoir comment obtenir les valeurs modifiées d'une case à cocher, i, e lorsque je change l'état de décocher pour vérifier l'état, la valeur doit être définie dans la propriété.

Répondre

5

Si un employé a la compétence Java, vous affichez la case à cocher suivante:

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

Cela signifie que le soumettre, si la case est cochée, le paramètre suivant sera envoyé:

ComputationalSkill2=Java 

Si un employé n'a pas le Java de compétences, vous affichez la case à cocher suivante:

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

Cela signifie que le soumettre, si la case est cochée, le paramètre suivant sera envoyé:

ComputationalSkill2=<blank space> 

Ce que vous voulez est de générer toujours la même case (le premier), mais présélectionner si l'employé a la compétence Java, et ne pas le présélectionner si l'employé n'a pas la compétence Java.

Ceci n'est pas possible, tout comme l'utilisation de la balise <html:checkbox>, car elle est supposée liée à une propriété booléenne. Donc, vous pourriez plutôt avoir une propriété isJavaSkilled()/setJavaSkilled() dans votre grain de forme, et utiliser

<html:checkbox property="javaSkilled"/> 

Struts sera pré-sélectionner la case à cocher si la propriété javaSkilled du formulaire est vrai, et le laisser sans contrôle si elle est fausse.

Notez cependant que puisque vous avez une liste de compétences qui peuvent être ou non présent, vous devriez plutôt avoir une propriété getSkills()/setSkills() de type String[], et utiliser une balise <html:multibox>.

+0

Merci pour la réponse Nizet. – user1879683

+0

J'ai une question, en utilisant le boolean isJavaSkilled()/setJavaSkilled() dans le formulaire, renvoie uniquement la valeur true ou false sur Submit. J'aime envoyer les valeurs Java et C/C++ selon Submit, en cochant les cases non cochées. Encore une fois, j'ai deux setters et getters pour prendre les deux valeurs, mais en utilisant n'a pas fonctionné pour le get et le type de chaîne. Pourriez-vous s'il vous plaît me dire comment gérer ce problème. – user1879683

+2

'' ne supporte que les booléens. C'est documenté. Comme je l'ai dit dans ma réponse, vous devriez utiliser un ' –