La fonction “ ” doit être utilisé avec un préfixe lorsqu'un espace de noms par défaut n'est pas spécifié
nous faisons un peu bizarre de la manipulation de nos variables de formulaire. De toute façon, j'ai réussi à obtenir les variables à partir de la demande afin que je puisse faire une base de données des trucs. Maintenant, je veux publier sur le de sorte que le sélectionnez les cases sont peut être renseigné avec les sélections d'origine.
Voici un exemple d'un champ de sélection:
JSP:
Condition Code:
<select size="1" name="filterCriteria('CONDITION_CODE').values">
<option value=""> </option>
<c:forEach var="bean" items="${conditions}">
<option value="'${bean.code}'"<c:if test="${bean.code == form.filterCriteria('CONDITION_CODE').values}"> selected="selected"</c:if>>${bean.code}: ${bean.description}</option>
</c:forEach>
</select>
<input type="hidden" name="filterCriteria('CONDITION_CODE').fieldName" value="CONDITION_CODE"/>
<input type="hidden" name="filterCriteria('CONDITION_CODE').operation" value="="/>
Comme vous pouvez le voir, le nom est une fonction de la forme: name="filterCriteria('CONDITION_CODE').values
Ici est de la forme:
private String[] fieldNames;
private Map<String, FilterCriteriaForm> filters =
new HashMap<String, FilterCriteriaForm>();
public String[] getFieldNames() { return this.fieldNames; }
public Map<String, FilterCriteriaForm> getFilters() { return this.filters; }
public FilterCriteriaForm getFilterCriteria(String fieldName)
throws ServletException
{
FilterCriteriaForm filter = (FilterCriteriaForm)filters.get(fieldName);
if (filter == null)
{
filter = new DetFilterCriteriaForm( requestAction );
filters.put( fieldName, filter );
}
return filter;
}
public void setFilters(Map<String, FilterCriteriaForm> val) { this.filters = val; }
}
De toute façon, normalement, je fais quelque chose de ce genre sur les jsp pour définir le champ arrière pour ce qui est de la forme: "<c:if test="${bean.code == form.filterCriteria('CONDITION_CODE').values}"> selected="selected"</c:if>
Quand je fais cela...j'ai cette erreur:
La fonction filterCriteria doit être utilisé avec un préfixe lorsqu'un espace de noms par défaut n'est pas spécifié
edit:
Condition Code: <select size="1" name="filterCriteria('CONDITION_CODE').values">
<c:set var="condition" value="filterCriteria('CONDITION_CODE').values" />
<option value=""> </option>
<c:forEach var="bean" items="${conditions}">
<option value="'${bean.code}'" <c:if test="${bean.code == param[condition]}">selected="selected"</c:if>>${bean.code}: ${bean.description}</option>
</c:forEach>
</select>
<input type="hidden" name="filterCriteria('CONDITION_CODE').fieldName" value="CONDITION_CODE"/>
<input type="hidden" name="filterCriteria('CONDITION_CODE').operation" value="="/>
<br/></br>
C'EST CE QUI A FONCTIONNÉ....J'ai regardé à nouveau le formulaire de plus près...a pris les guillemets simples et utilisé le getFilters():
<select size="1" name="filterCriteria(CONDITION_CODE).values">
<option value=""> </option>
<c:forEach var="bean" items="${conditions}">
<c:set var="code" value="'${bean.code}'" />
<option value="${code}" <c:if test='${code == form.filters["CONDITION_CODE"].values[0]}'>selected="selected"</c:if>>${bean.code}: ${bean.description}</option>
</c:forEach>
</select>
OriginalL'auteur Doc Holiday | 2012-02-16
Vous devez vous connecter pour publier un commentaire.
Pourquoi êtes-vous de donner à votre forme et des éléments d'entrée non valide noms comme ça?
De toute façon, votre béton problème, c'est que vous n'êtes pas le comparer à une simple chaîne de caractères, mais à un EL de l'objet. Comme vous l'avez maintenant, il s'attend à un haricot
${form}
avec une méthodefilterCriteria(String)
qui retourne un objet qui a unegetValues()
méthode. Ce n'est pas ce que vous voulez. Vous voulez être une simple chaîne de caractères.Fixer comme suit, vous avez besoin de le citer:
Mais cela ne vous permettront pas d'atteindre l'exigence fonctionnelle. Il ressemble que vous êtes confus Java/JSP avec JavaScript et d'attendre qu'ils fonctionner en synchronisation. Ce n'est pas vrai, Java/JSP s'exécute dans le serveur web et génère du code HTML. JavaScript est une partie de code HTML et s'exécute dans le navigateur web. Le
form
variable est disponible uniquement en JavaScript, pas dans un de balises JSTL.Vous fait besoin de saisir la valeur soumise comme un paramètre de la requête par
${param}
. Les valeurs d'entrée tous les éléments sont accessibles par leur nom dans le paramètre de la requête de la carte. Il serait comme suit:J'ai seulement ne garantit pas si cela serait, je n'ai jamais utilisé les noms comportant des caractères non valides, vous peut-être besoin d'encoder les caractères illisibles. Il serait beaucoup plus facile si vous donnez à votre forme et des éléments d'entrée d'un nom valide qui correspond à des règles comme par La spécification HTML.
(note que vous avez eu une valeur non valide dans
<option value>
, ceux singlequotes qui ne leur appartient pas, j'ai enlevé les)Mise à jour: selon les commentaires, vous semblez avoir un EL erreur de syntaxe problème lors de l'accès au illégal le nom du paramètre dans EL. Les caractères d'échappement
\
semble être complètement avalé par la EL de l'analyseur. Votre meilleur pari est probablement de faire un alias avec<c:set>
:Mise à jour 2: ceux singlequotes autour de la valeur de l'option semble être absolument nécessaire. Dans ce cas, vous devez ajouter un autre alias. Le code devrait ressembler à ceci:
OriginalL'auteur BalusC