- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
问题:
我们有一个基于 Apache MyFaces Trinidad 的 Java 网络应用程序。当一个字段包含一些特殊字符(例如 Ñ、á 等)时,我们在尝试部分提交(仅此而已:通过 Ajax)表单时遇到了一些问题。
当我们在文本字段中写入像 camión
这样的值时,生成的消息是 Hola cami
(它会删除特殊字符,然后是下一个字符)。
我们运行代码的应用服务器是 IBM WebSphere AS 7.0。
此行为已在 IExplorer 和 Firefox 浏览器上观察到,它们都是从 Windows XP Professional(西类牙语版)运行的。
主要代码片段:
更新:根据 lkdg
的回答(谢谢),我更新了 JSP 和生成的 HTML 代码片段。
JSP 页面代码:
<%@page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://myfaces.apache.org/trinidad" prefix="tr" %>
<%@ taglib uri="http://myfaces.apache.org/trinidad/html" prefix="trh" %>
<f:view>
<tr:document>
<trh:head title="Prueba de AJAX con todas las Cabeceras">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</trh:head>
<tr:form>
<tr:panelHorizontalLayout halign="left">
<f:facet name="separator">
<tr:spacer width="10" height="5"/>
</f:facet>
<tr:inputText id="elCampo" label="Your name" value="#{commandButtonBean.name}"
requiredMessageDetail="Name is required"
/>
<tr:commandButton id="sayHello" text="Say Hello"
partialSubmit="true"
action="#{commandButtonBean.sayHello}"
/>
</tr:panelHorizontalLayout>
<tr:spacer height="15px"/>
<tr:outputText value="#{commandButtonBean.message}" partialTriggers="sayHello"
inlineStyle="font-weight: bold;"/>
</tr:form>
</tr:document>
</f:view>
这是生成的 HTML 输出(删除了一些空行):
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><!--Start: org.apache.myfaces.trinidad.Document["j_id_jsp_1876237926_1"]--><html dir="ltr" lang="es-ES">
<head>
<meta name="generator" content="Apache MyFaces Trinidad">
<link rel="stylesheet" charset="UTF-8" type="text/css" href="/ModuloTrinidadPilotoWeb/adf/styles/cache/bigfont-desktop-nur72r-ltr-gecko.css">
</head>
<!--Start: org.apache.myfaces.trinidad.Document["j_id_jsp_1876237926_1"]-->
<body onload="_checkLoad()" onunload="_checkUnload(event)"><script type="text/javascript">var _AdfWindowOpenError='Se ha detectado un bloqueo de ventana emergente en el explorador. Estos bloqueos interfieren con el funcionamiento de esta aplicación. Desactívelo o permita elementos emergentes desde esta dirección.';</script><script type="text/javascript" src="/ModuloTrinidadPilotoWeb/adf/jsLibs/Common1_2_10.js"></script><!--Start: org.apache.myfaces.trinidad.Document["j_id_jsp_1876237926_1"]--><div id="tr_pprBlockingDiv" onclick="return _pprConsumeClick(event);" style="position:absolute;left:0;top:0;width:0;height:0;cursor:wait;" onkeydown="return false;" onkeyup="return false;" onmousedown="return false;" onmouseup="return false;" onkeypress="return false;"></div><a name="top"></a>
<noscript>Esta página utiliza JavaScript y necesita un explorador activado para JavaScript. Su explorador no está activado para JavaScript.</noscript>
<!--Start: org.apache.myfaces.trinidad.Head["j_id_jsp_1876237926_2"]-->
<head>
<title>Prueba de AJAX con todas las Cabeceras</title>
<meta name="generator" content="Apache MyFaces Trinidad">
<link rel="stylesheet" charset="UTF-8" type="text/css" href="/ModuloTrinidadPilotoWeb/adf/styles/cache/bigfont-desktop-nur72r-ltr-gecko.css">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>
<!--Start: org.apache.myfaces.trinidad.Form["j_id_jsp_1876237926_3"]-->
<form id="j_id_jsp_1876237926_3" name="j_id_jsp_1876237926_3" style="margin:0px" method="POST" onkeypress="return _submitOnEnter(event,'j_id_jsp_1876237926_3');" action="/ModuloTrinidadPilotoWeb/jsp/sgtc/pruebaAjax2.faces"><!--Start: org.apache.myfaces.trinidad.Panel["j_id_jsp_1876237926_4"]--><table cellpadding="0" cellspacing="0" border="0" summary=""><tr>
<td><!--Start: org.apache.myfaces.trinidad.Input["elCampo"]--><table id="elCampo__xc_" class="af_inputText" cellpadding="0" cellspacing="0" border="0" summary=""><tr>
<td class="af_inputText_label" nowrap><span id="elCampo::icon" style="display:none;"><a name="_msgAnc_elCampo" title="Error" class="AFErrorIconStyle">X</a></span> <label for="elCampo">Your name</label></td>
<td valign="top" nowrap class="AFContentCell"><!--Start: org.apache.myfaces.trinidad.Input["elCampo"]--><input id="elCampo" name="elCampo" class="af_inputText_content" size="30" type="text"></td>
</tr><tr>
<td></td>
<td class="AFComponentMessageCell"><!--Start: org.apache.myfaces.trinidad.Input["elCampo"]--><span id="elCampo::msg" class="OraInlineErrorText"></span></td>
</tr></table></td>
<td><!--Start: org.apache.myfaces.trinidad.Object["j_id_jsp_1876237926_5"]--><img src="/ModuloTrinidadPilotoWeb/adf/images/t.gif" alt="" width="10" height="5"></td>
<td><script type="text/javascript">var _pprUpDatemode=false;function _adfspu(f,v,e,s,o){_pprUpdateMode=true;if(!o)o=new Object();if(e)o.event=e;if(s)o.source=s;_submitPartialChange(f,v,o);}</script><!--Start: org.apache.myfaces.trinidad.Command["sayHello"]-->
<button id="sayHello" name="sayHello" type="button" onclick="TrPage._autoSubmit('j_id_jsp_1876237926_3','sayHello',event,1);return false;" class="af_commandButton">Say Hello</button>
</td>
</tr></table><!--Start: org.apache.myfaces.trinidad.Object["j_id_jsp_1876237926_8"]--><div style="margin-top:15px"></div><!--Start: org.apache.myfaces.trinidad.Output["j_id_jsp_1876237926_9"]--><span id="j_id_jsp_1876237926_9" style="font-weight: bold;"></span><input type="hidden" name="org.apache.myfaces.trinidad.faces.FORM" value="j_id_jsp_1876237926_3"><!--Start: org.apache.myfaces.trinidad.Form--><span id="tr_j_id_jsp_1876237926_3_Postscript"><input type="hidden" name="javax.faces.ViewState" value="!-4fd3ee50"><script type="text/javascript">function _j_id_jsp_1876237926_3Validator(f,s){return _validateInline(f,s);}var j_id_jsp_1876237926_3_SF={};</script></span><script type="text/javascript">_submitFormCheck();</script></form>
</body>
<!--Created by Apache Trinidad (Apache MyFaces Trinidad API - 1.2.10/Apache MyFaces Trinidad Impl - 1.2.10), skin:bigfont.desktop (bigfont)--></html>
CommandButton bean 代码:
public class CommandButtonBean {
public String name;
public String message;
public String sayHello(){
message = "Hola " + name;
return "";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
当然,命令按钮是在 faces-config.xml 中配置的(我认为这段代码不相关)。
到目前为止尝试的修复:
此外,我们在 web.xml 中包含下一个上下文参数:
<context-param>
<param-name>PARAMETER_ENCODING</param-name>
<param-value>UTF-8</param-value>
</context-param>
我们已经记录了值是多少作为参数传递给setName
方法,如果可以的话编写响应时出错。这传递的值已经是错误的。
我们尝试写了一个网页过滤器,将请求字符集设置为 UTF-8(就在案例,你知道)。但是当记录过滤器的参数值,我们也得到了错误的值。
最后我们删除了partialSubmit
的属性提交按钮,并获得了权利值(value)。但这并不能真正解决我们的问题问题,因为我们正在努力实现一些内联搜索和验证(我们不想重绘整个页面)。
因此,当我们发送一个普通的 POST 消息时,我们得到了预期的结果,但是当我们尝试使用 Ajax 方法时,我们丢失了这些特殊字符。
最后,问题:
您对如何解决这个问题有什么建议吗?
非常感谢。
最佳答案
这是特立尼达和 WAS 的一个已知问题:http://www.mail-archive.com/dev@myfaces.apache.org/msg46298.html .您将不得不对两个 js 文件进行小的修改,您需要对发送的字符进行编码(Naveen Ravindra 的解决方案有效)。编辑这些文件:
给它们添加这个新函数(粘贴到js的开头:
function encodeCharacters(string) {
string = string.replace(/\r\n/g, "\n");
var utftext = "";
for ( var n = 0; n < string.length; n++) {
var c = string.charCodeAt(n);
if (c < 128) {
utftext += String.fromCharCode(c);
} else if ((c > 127) && (c < 2048)) {
utftext += String.fromCharCode((c >> 6) | 192);
utftext += String.fromCharCode((c & 63) | 128);
}
else {
utftext += String.fromCharCode((c >> 12) | 224);
utftext += String.fromCharCode(((c >> 6) & 63) | 128);
utftext += String.fromCharCode((c & 63) | 128);
}
}
return utftext;
}
更改相同js中的TrXMLRequest.prototype.send
函数。在里面改
xmlhttp.send(content);
到 xmlhttp.send(encodeCharacters(content));
在调试版本中,和 a4.send(a3);
到生产版本中的 a4.send(encodeCharacters(a3));
。经过测试,适用于 WAS 7.0.0.11。
关于jsf - Myfaces 特立尼达 JSF : Ajax problem when sending Non US-ASCII Characters,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5116897/
EDIT: The solution that you can find in comments below assumes changing JSF implemenetation from MyF
我正在用 MyFaces 在 JSF 中做一些开发工作,我收到了这个警告。 **************************************************************
我是 JSF 的初学者。 据我所知,要开始使用 JSF,我必须下载它的一个实现,例如 Apache MyFaces。但是 myfaces-core 中的库是什么?我的意思是,它们各自执行什么功能? 还
主题标题确实说明了一切: 我想在运行时检测 MyFaces 的版本。这可能吗? 似乎有一个 discussion about this kind of feature很久以前,但我找不到任何内容,如果
我正在尝试执行抽象类中的 PostConstruct 注释方法, public abstract class AbstractTest { @PostConstruct
我是 JSF2.0 的初学者。 我正在使用 MyFaces。 我的小教程应用程序没问题,但我在 MyFaces 的日志中注意到以下内容: org.apache.myfaces.util.Externa
两天前,我开始在我的 jsf 应用程序中使用 tomahawk ExtensionsFilter 组件。我注意到所有 javascript 警报都没有显示特殊字符(ç、ã、ó ô),而是显示类似 #2
例如,当我在 @ManagedBean 的构造函数中强制使用 NPE 时然后我在 Eclipse 中看到了一个很好的堆栈跟踪。但是,当 a4j:commandbutton 的操作中出现同样的错误时那么
目前尚不清楚我是否应该使用 MyFaces 或 Mojarra 作为 JSF 2.0 的 PrimeFaces 实现。 PrimeFaces 与其中一个的问题较少吗? 最佳答案 根据 Primefac
我从 JSF2.0 开始,我使用了教程作为引用,但我有以下问题: 本教程仅使用了 2 个库:来自 Mojarra 项目的 jsf-api.jar、jsf-impl.jar(但也有 JSTL)。 我也尝
我正在将应用程序从 websphere 8.5.5.x 环境迁移到 liberty 20.0.0.3。除了 JSF 部分之外,大部分内容我都可以正常工作。初始化出了问题,我不知道它是什么,也不知道如何
将 Mojarra 更改为 MyFaces 后,我的 Web 应用程序出现了一个奇怪的问题...我有一个从外部加载的xhtml文件,也就是说,这个xhtml被重用了很多:
我有一个带有一些表单、xhtml 页面的 JSF 2.0 项目,添加 MyFaces Trinidad 输入日期组件并运行该应用程序后,当我单击“输入日期”图标时,它没有响应并且不执行任何操作?或者我
我有哪些选项可以从我的 JSP 页面读取当前用户的角色?我知道 Tomahawk 组件上的 visibleOnUserRole="myRole" 属性,但我需要角色来处理比简单可见性更复杂的事情。 最
只是一个愚蠢的初学者问题,很快就会解决,但我很好奇。 http://www.irian.at/myfacesexamples/home.jsf说: “MyFaces - 免费 JavaServer™
我需要创建一个具有登录系统的网络应用程序。用户应该针对数据库进行身份验证。我想在 session 中保存用户角色 - 或者还有其他(更好)的方法吗? 此外还有供用户访问的区域。会客区、用户区,管理区域
我目前正在尝试从 JBOSS Weld AS7 切换到 Wildfly 8 Beta。我编译了它,但是当尝试加载页面本身时,出现以下异常: Caused by: java.lang.IllegalSt
在我们的软件中,我们使用 myfaces 1 实现了 2 个过滤器。首先是/jsf,另一个是/1,其映射类在 web.xml 文件中。它适用于 myfaces 1,但是当我们在 Web 应用程序的每个
我正在使用带有 Facelets 和 Tomahawk 的 MyFaces 1.1.7。 创建常规数据表时,例如:
FacesContext.getCurrentInstance().getExternalContext().getFlash() 我正在尝试使用上面的代码,似乎 getFlash() 在 Myfac
我是一名优秀的程序员,十分优秀!