留言板

Probleme encodage nouveau portlet

Roulien DeLaVegas,修改在16 年前。

Probleme encodage nouveau portlet

New Member 发布: 1 加入日期: 08-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,修改在12 年前。

RE: Probleme encodage nouveau portlet

New Member 帖子: 14 加入日期: 12-4-13 最近的帖子
Bonjour,

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

Une solution connue?? emoticon
Olivier Bonnet-Torrès,修改在12 年前。

RE: Probleme encodage nouveau portlet

Regular Member 帖子: 162 加入日期: 08-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,修改在12 年前。

RE: Probleme encodage nouveau portlet

New Member 帖子: 14 加入日期: 12-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
name=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,修改在12 年前。

RE: Probleme encodage nouveau portlet

Regular Member 帖子: 162 加入日期: 08-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,修改在12 年前。

RE: Probleme encodage nouveau portlet

New Member 帖子: 14 加入日期: 12-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

<aui:form action="<%= editToolBoxURL %>" method="post" enctype="multipart/form-data"> 
		<aui:model-context bean="<%= currentTool %>" model="<%= Tool.class %>" />
		<liferay-ui:error key="error" message="Une erreur est survenue" /> 
		<aui:input label="Nom" model="<%=Tool.class%>" name="name" value="<%=HtmlUtil.escape(currentTool.getName()) %>">
			<aui:validator name="required" errorMessage="Obligatoire" />
		</aui:input> 
		
		<aui:input label="Url" model="<%=Tool.class%>" name="path" type="text" value="<%= HtmlUtil.escape(currentTool.getPath()) %>">
			<aui:validator name="required" errorMessage="Obligatoire" />
		</aui:input> 
		<aui:input model="<%=Tool.class%>" label="Image" name="imagePath" type="file" value="<%= currentTool.getImagePath() %>">
			<aui:validator name="acceptFiles">
				'png jpg gif '
			</aui:validator>
		</aui:input>
		<aui:input model="<%=Tool.class%>" label="ToolId" name="toolId" type="hidden" value="<%= currentTool.getToolId() %>" /> 
		<aui:input model="<%=Tool.class%>" label="UserId" name="userId" type="hidden" value="<%=idUser %>" /> 	
		<aui:input label="Bd" name="bd" type="hidden" value="<%= currentTool.getNfm_bd() %>" />
		<aui:input label="Statut" name="statut" type="hidden" value="<%= statut %>" /> 
                <aui:button type="submit" /> 
                 <aui:a href="<%=viewToolsURL %>">← Retour</aui:a>
	</aui:form>	


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

List<!--?--> items = upload.parseRequest(actionRequest);
	            
	            // Process the items
	            Iterator<!--?--> iter = items.iterator();
	            while (iter.hasNext())
	            {
	                FileItem item = (FileItem) iter.next();
	                if (item.isFormField()) // The item represents a simple form field
	                {	  
	                    if(item.getFieldName().endsWith("toolId"))
	                    	idtool=Integer.parseInt(item.getString());
	                    if(item.getFieldName().endsWith("userId"))
	                    	idUser=Integer.parseInt(item.getString());
	                    if(item.getFieldName().endsWith("path"))
	                    	path=item.getString();
	                    if(item.getFieldName().endsWith("name")){	
							Log.ecrire("ok bah c pas cool: "+HtmlUtil.escape(item.getString()));
	                    	name=HtmlUtil.escape(item.getString()); 
	                    	
	                    }
	                    	
	                    if(item.getFieldName().endsWith("statut"))
	                    	statut=Boolean.parseBoolean(item.getString());
	                    if(item.getFieldName().endsWith("bd"))
	                    	bd=Integer.parseInt(item.getString());
	                    
                    	actionResponse.setRenderParameter(item.getFieldName(), item.getString());
	                }else{
	                	file=item;
	                }
	            }


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,修改在12 年前。

RE: Probleme encodage nouveau portlet

New Member 帖子: 14 加入日期: 12-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 "é":
[indent]Validation 1: é[/indent]
[indent]Validation 2: é[/indent]
[indent]Validation 3: é[/indent]
[indent]Validation 4: é[/indent]

etc.

Je ne comprend vraiment pas ce qui se passe ...
Olivier Bonnet-Torrès,修改在12 年前。

RE: Probleme encodage nouveau portlet

Regular Member 帖子: 162 加入日期: 08-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,修改在12 年前。

RE: Probleme encodage nouveau portlet

New Member 帖子: 14 加入日期: 12-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:

<aui:input label="Nom" model="<%=Tool.class%>" name="name" value="<%=HtmlUtil.escape(currentTool.getName())%>">
			<aui:validator name="required" errorMessage="Obligatoire" />
		</aui:input> 


Je récupère le contenu de mon champs input au niveau de mon code java avec
name=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,修改在12 年前。

RE: Probleme encodage nouveau portlet

New Member 帖子: 14 加入日期: 12-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:

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


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,修改在12 年前。

RE: Probleme encodage nouveau portlet

Regular Member 帖子: 162 加入日期: 08-7-11 最近的帖子
Bonjour,

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

Le problème subsiste-t'il?
Lechat Jérémy,修改在11 年前。

RE: Probleme encodage nouveau portlet

New Member 帖子: 14 加入日期: 12-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