组合视图 统一视图 树状图
讨论主题 [ 上一个 | 下一个 ]
toggle
Roulien DeLaVegas
Probleme encodage nouveau portlet
2008年4月18日 上午2:08
答复

Roulien DeLaVegas

等级: New Member

帖子: 1

加入日期: 2008年4月18日

最近的帖子

Bonjour,

J'ai un petit soucis, lorsque je créer un nouveau portlet qui comporte des accents, ceux-ci sont remplacés par des carractéres spéciaux.

Pourtant la base est bien en utf8 (general_ci) et je force l'utf-8 dans mon apache par adddefaultcharset utf-8

Le probleme ne se reproduit pas avec avec d'autre données de la base comme les infos utilisateur etc.
exemple, si je met des caractéres accentués dans mon message de bienvenue, ceux-ci sont correctement retranscris.

Le probleme ne se produit qu'avec l'ajout d'un portlet contenant des accents

Si vous avez une idée, Merci
Lechat Jérémy
RE: Probleme encodage nouveau portlet
2012年4月23日 上午2:56
答复

Lechat Jérémy

等级: New Member

帖子: 14

加入日期: 2012年4月13日

最近的帖子

Bonjour,

ce post date mais j'ai le même soucis ...

Une solution connue?? emoticon
Olivier Bonnet-Torrès
RE: Probleme encodage nouveau portlet
2012年4月23日 上午5:30
答复

Olivier Bonnet-Torrès

等级: Regular Member

帖子: 157

加入日期: 2008年7月11日

最近的帖子

Bonjour,

Votre problème est bien un problème d'encodage... au niveau du système de fichiers de la machine de développement!
Il ne s'agit ni de l'interprétation par le serveur web (httpd ou autre), ni de la base de données.
Certains messages traduits sont stockés dans des fichiers xml (e.g. portlet.xml et affiliés) ou properties (e.g. language_fr_FR.properties).
Ces fichiers sont stockés sur le système de fichiers de l'OS hôte, avec l'encodage par défaut (ISO8859-1 dans le cas de Windows en français) de ce dernier (même si dans Eclipse, vous avez forcé l'encodage UTF8 des fichiers, cette propriété ne s'applique pas directement sur ces types de fichiers).
Il vous faut donc vous assurer que les-dits fichiers sont bien encodés en UTF8 et que vous forciez cet encodage dans Eclipse, explicitement pour ces fichiers. Si vous utilisez d'autres utilitaires avant les déploiements, certains outils ont également tendance à réinterpréter l'encodage des fichiers.

Si cette réponse convient à votre problème, merci de la signaler comme telle, de façon à ce que d'autres utilisateurs puissent s'y référer.
Lechat Jérémy
RE: Probleme encodage nouveau portlet
2012年4月23日 上午6:39
答复

Lechat Jérémy

等级: New Member

帖子: 14

加入日期: 2012年4月13日

最近的帖子

Bonjour Olivier et merci pour ces informations.

J'ai également un formulaire qui contient des champs input. La saisie de caractère avec des accents ne fonctionne pas non plus.

Je pensais que le problème venait de la bdd mais avec des test, j'ai pu voir que le problème se retrouvait dès la récupération du contenu de mon champs avec
1name=item.getString();
où item est un FileItem.

J'ai tout essayé pour arranger ça, sans succès.

Est-ce un problème du même genre ?
Olivier Bonnet-Torrès
RE: Probleme encodage nouveau portlet
2012年4月23日 上午6:49
答复

Olivier Bonnet-Torrès

等级: Regular Member

帖子: 157

加入日期: 2008年7月11日

最近的帖子

Non (si on est dans une JSP), il s'agirait plutôt d'un problème de (non-)échappement de caractères... Ajouter un HtmlUtil.escape() à l'affichage peut s'avérer utile, également en terme de sécurité.
Si le problème est visible dans la classe du portlet, il faudrait pouvoir se plonger plus avant dans le code... Et là cela pourrait être dû à un pasasge de chaîne ISO interprétée par Java (i.e. en UTF-16).
Lechat Jérémy
RE: Probleme encodage nouveau portlet
2012年4月23日 上午7:29
答复

Lechat Jérémy

等级: New Member

帖子: 14

加入日期: 2012年4月13日

最近的帖子

Je ne suis pas dans un JSP mais dans ma classe qui hérite de MVCPortlet.

C'est quand je récupère le contenu de mes champs que je n'obtient pas le bon.

J'ai tenté d’essayé avec HtmlUtil.escape(), mais ça n'a pas fonctionné.

Voiçi mon formulaire
 1
 2<aui:form action="<%= editToolBoxURL %>" method="post" enctype="multipart/form-data" >
 3        <aui:model-context bean="<%= currentTool %>" model="<%= Tool.class %>" />
 4        <liferay-ui:error key="error" message="Une erreur est survenue"/>
 5        <aui:input label="Nom" model="<%=Tool.class%>" name="name" value="<%=HtmlUtil.escape(currentTool.getName()) %>">
 6            <aui:validator name="required" errorMessage="Obligatoire"/>
 7        </aui:input>
 8       
 9        <aui:input label="Url" model="<%=Tool.class%>" name="path" type="text" value="<%= HtmlUtil.escape(currentTool.getPath()) %>" >
10            <aui:validator name="required" errorMessage="Obligatoire" />
11        </aui:input>
12        <aui:input model="<%=Tool.class%>" label="Image" name="imagePath" type="file" value="<%= currentTool.getImagePath() %>">
13            <aui:validator name="acceptFiles">
14                'png jpg gif '
15            </aui:validator>
16        </aui:input>
17        <aui:input model="<%=Tool.class%>" label="ToolId" name="toolId" type="hidden" value="<%= currentTool.getToolId() %>" />
18        <aui:input model="<%=Tool.class%>" label="UserId" name="userId" type="hidden" value="<%=idUser %>" />    
19        <aui:input label="Bd" name="bd" type="hidden" value="<%= currentTool.getNfm_bd() %>" />
20        <aui:input label="Statut" name="statut" type="hidden" value="<%= statut %>" />
21                <aui:button type="submit" />
22                 <aui:a href="<%=viewToolsURL %>">&larr; Retour</aui:a>
23    </aui:form>   


et celui pour récupérer le contenue de mes champs

 1List<?> items = upload.parseRequest(actionRequest);
 2               
 3                // Process the items
 4                Iterator<?> iter = items.iterator();
 5                while (iter.hasNext())
 6                {
 7                    FileItem item = (FileItem) iter.next();
 8                    if (item.isFormField()) // The item represents a simple form field
 9                    {      
10                        if(item.getFieldName().endsWith("toolId"))
11                            idtool=Integer.parseInt(item.getString());
12                        if(item.getFieldName().endsWith("userId"))
13                            idUser=Integer.parseInt(item.getString());
14                        if(item.getFieldName().endsWith("path"))
15                            path=item.getString();
16                        if(item.getFieldName().endsWith("name")){   
17                            Log.ecrire("ok bah c pas cool: "+HtmlUtil.escape(item.getString()));
18                            name=HtmlUtil.escape(item.getString());
19                           
20                        }
21                           
22                        if(item.getFieldName().endsWith("statut"))
23                            statut=Boolean.parseBoolean(item.getString());
24                        if(item.getFieldName().endsWith("bd"))
25                            bd=Integer.parseInt(item.getString());
26                        
27                        actionResponse.setRenderParameter(item.getFieldName(), item.getString());
28                    }else{
29                        file=item;
30                    }
31                }


Si le problème est visible dans la classe du portlet, il faudrait pouvoir se plonger plus avant dans le code... Et là cela pourrait être dû à un pasasge de chaîne ISO interprétée par Java (i.e. en UTF-16).

Comment puis-je faire pour ça ?
Lechat Jérémy
RE: Probleme encodage nouveau portlet
2012年4月23日 上午8:01
答复

Lechat Jérémy

等级: New Member

帖子: 14

加入日期: 2012年4月13日

最近的帖子

Je viens de m'apercevoir d'une chose, si je valide plusieurs fois mon formulaire, le caractère change.

Je m'explique:

Pour un "é":
Validation 1: é
Validation 2: é
Validation 3: é
Validation 4: é

etc.

Je ne comprend vraiment pas ce qui se passe ...
Olivier Bonnet-Torrès
RE: Probleme encodage nouveau portlet
2012年4月23日 上午9:56
答复

Olivier Bonnet-Torrès

等级: Regular Member

帖子: 157

加入日期: 2008年7月11日

最近的帖子

Mmmm...
La chaîne de caractères est rééchappée à chaque tour... Et pour cause: l'échappement est demandé des deux côtés (JSP et Java).
Au niveau du code JSP, vous avez besoin d'utiliser le HtmlUtil.escape(), puisque la donnée vient du modèle et qu'on cherche à éviter une injection HTML/JS. En revanche, vous n'avez pas besoin d'échapper au niveau du contrôleur ou du modèle (code Java). Ce qui n'empêche pas une validation!
Lechat Jérémy
RE: Probleme encodage nouveau portlet
2012年4月24日 上午1:03
答复

Lechat Jérémy

等级: New Member

帖子: 14

加入日期: 2012年4月13日

最近的帖子

Bonjour,

je vois bien ce que vous voulez dire, mais même en essayant de toutes les manières possibles, cela ne fonctionne pas.

Par exemple pour le nom j'ai mis:
1
2<aui:input label="Nom" model="<%=Tool.class%>" name="name" value="<%=HtmlUtil.escape(currentTool.getName())%>">
3            <aui:validator name="required" errorMessage="Obligatoire"/>
4        </aui:input>


Je récupère le contenu de mon champs input au niveau de mon code java avec
1name=item.getString();


Est-ce-que le problème pourrait venir du modèle de données de mon objet "Tool"? J'utilise Liferay IDE sur Eclipse et je l'ai construit grâce au Service Builder. Je n'ai pas trouvé le moyen de spécifier l'encodage directement à cet endroit.

Je suis vraiment désolé de galérer à ce point là-dessus mais ça fait plusieurs jours que je suis sur ce problème et je commence a désespérer ... :'(

Merci encore pour ces réponses
Lechat Jérémy
RE: Probleme encodage nouveau portlet
2012年4月24日 上午1:59
答复

Lechat Jérémy

等级: New Member

帖子: 14

加入日期: 2012年4月13日

最近的帖子

Re-Bonjour

à priori j'ai l'impréssion que le soucis vient du fait que dans mon formulaire j'upload une image et que j'utilise un form:

1<aui:form action="<%= editToolBoxURL %>" method="post" enctype="multipart/form-data">


parce que quand je fait un passage de paramètre classique, ça fonctionne ...

par contre, je suis un peu perdu sur la raison exact.
Olivier Bonnet-Torrès
RE: Probleme encodage nouveau portlet
2012年4月24日 上午2:03
答复

Olivier Bonnet-Torrès

等级: Regular Member

帖子: 157

加入日期: 2008年7月11日

最近的帖子

Bonjour,

En utilisant:
1ParamUtil.getString(uploadRequest, "name");

Le problème subsiste-t'il?
Lechat Jérémy
RE: Probleme encodage nouveau portlet
2012年5月3日 下午11:55
答复

Lechat Jérémy

等级: New Member

帖子: 14

加入日期: 2012年4月13日

最近的帖子

Bonjour,

je suis désolé, je suis partis sur un tout autres sujet et je n'ai pas vu cette réponse.

Pour mon problème, j'ai enlevé le enctype et je me suis débrouillé autrement pour l'image.

Je serais amené à utiliser ce genre de chose dans les semaines à venir et j’essaierai cette méthode.

Merci pour ta réponse