当我从网页上提交角色Ö后,后端收到了Ã.该网页是Spring Webflow/JSF1.2/Facelets应用程序的一部分.当我用firebug检查POST时,我看到:
Content-Type: application/x-www-form-urlencoded
Content-Length: 74
rapport=krediet_aanvragen&fw1=0&fw2=%C3%96ZTEKIN&fw3=0&fw4=0&zoeken=Zoeken
Run Code Online (Sandbox Code Playgroud)
字符Ö编码为%C3%96,使用此表我可以看到它是UTF-8/Unicode字符Ö的正确十六进制表示.但是当它到达后端时,角色会变成Ã.使用相同的表我可以看到有些代码试图分别解释C3和96(或作为unicode\u表示法).U + 00C3恰好是Ã,96不是可见字符,因此可以解释这一点.
现在我知道这是编码不匹配的典型情况,我只是不知道在哪里修复此问题.
该网页包含
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
Run Code Online (Sandbox Code Playgroud)
在调试时,我可以看到负责错误interpration的库是jboss-el 2.0.0.GA,这似乎是正确的,因为该值被解析为webflow表达式中的后端:
<evaluate expression="rapportCriteria.addParameter('fw2', flowScope.fw2)" />
Run Code Online (Sandbox Code Playgroud)
它通过以下方式放到flowScope上:
<evaluate expression="requestParameters.fw2" result="flowScope.fw2"/>
Run Code Online (Sandbox Code Playgroud)
没关系将表单输入到后端的精确方法,这是试图将Webflow与BIRT报告集成的代码......但我在其他Web应用程序中有相同的sympton.
我有什么想法开始寻找?
我有这个本地URL: http:// localhost:8084/Name/faces/Blah.xhtml?flkatid = AAA
这是一个来自facelet的片段,它检查参数"flkatid"并将其分配给bean:
<f:metadata>
<f:viewParam name="flkatid"
id="flkatid"
value="#{floKatBean.flkatid}"
required="true"
requiredMessage="URL incomplete"
validator="#{floKatBean.validateFlKatId}"
validatorMessage="URL incomplete or invalid"
>
</f:viewParam>
<f:event type="preRenderView" listener="#{floKatBean.init}"/>
<f:event type="preRenderView" listener="#{floBean.holFloListe}"/>
</f:metadata>
Run Code Online (Sandbox Code Playgroud)
floKatBean.flkatid是一个整数,因此URL无效.将显示一个页面,告诉您:
flkatid:'AAA'必须是由一个或多个数字组成的数字.flkatid:'AAA'必须是-2147483648和2147483647之间的数字示例:9346
JSF检查参数本身,因为它知道bean元素是一个整数.仅当参数是整数时才调用自定义验证器.
是否有可能让服务器返回HTTP错误代码,例如403(禁止)而不离开"标准JSF世界"(或切换到RichFaces,MyFaces,SmileyFaces或其他)?我在f:viewParam中找不到任何"失败"的页面.在其他地方?
使用Facelets时遇到导航问题.
我有我的主模板/WEB-INF:
<h:body>
<div id="container">
<div id="header">
<ui:insert name="header">Header</ui:insert>
</div>
<div id="navigation">
<a href="ram.xhtml">RAM</a>
<a href="mobo.xhtml">Motherboard</a>
<a href="video.xhtml">Video Card</a>
</div>
<div id="content">
<ui:insert name ="content"></ui:insert>
</div>
</div>
</h:body>
Run Code Online (Sandbox Code Playgroud)
然后是2个看起来完全相同的模板客户端,index.xhtml并且ram.xhtml:
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns:ui="http://java.sun.com/jsf/facelets"
template="./WEB-INF/layoutTemplate.xhtml">
<ui:define name="header">
some text
</ui:define>
<ui:define name="content">
some content
</ui:define>
</ui:composition>
Run Code Online (Sandbox Code Playgroud)
如果将这些页面中的任何一个设置为欢迎页面web.xml,则可以使用CSS和所有内容正确呈现它们.但是,如果我尝试使用我得到的链接从一个页面导航到另一个页面
此XML文件似乎没有与之关联的任何样式信息.文档树如下所示.
任何提示将不胜感激.
我boolean在JSF托管bean中使用属性,并且根据其值,我必须在facelet上呈现命令链接.但问题是facelets显示此错误:
在我的支持bean上找不到属性'isPlayButtonEnabled'
所以,我从改变属性的数据类型测试的代码boolean来String.然后facelets没有显示任何错误.但是命令链接组件未在视图中呈现.这是怎么造成的,我该如何解决?
我有一个组件,我想在用户点击后显示/隐藏commandButton.
就像这样:
<h:commandButton id="showButton" value="#{bean.wasPressed ? 'Hide' : 'Show'}">
<f:ajax listener="#{bean.toggle()}" render="explanation showButton" />
</h:commandButton>
Run Code Online (Sandbox Code Playgroud)
和
<h:panelGroup id="explanation" rendered="#{bean.wasPressed}">
<h:outputText value="something" />
</h:panelGroup>
Run Code Online (Sandbox Code Playgroud)
在bean.toggle()简单地设置wasPressed属性为true或false适当.我在用<h:form prependId="false">.
问题是render我的按钮属性的值.它明确地征服了两者:explanation和showButton.
只要showButton始终存在(它只更改其标签),explanation仅当wasPressed属性为true 时才存在.否则它说:
malformedXML:更新期间:找不到解释
我怎么解决这个问题?
我不想恢复隐藏源代码中的元素,所以我不想使用任何jQuery切换( - )或任何使用style="display: none"或任何这些东西隐藏元素的方式.
它甚至可以在JSF 2.1中实现吗?
我在web.xml中有这个条目
<context-param>
<param-name>facelets.DEVELOPMENT</param-name>
<param-value>true</param-value>
</context-param>
Run Code Online (Sandbox Code Playgroud)
尝试按Ctrl + Shift + D打开调试模式,但没有工作,我的浏览器的书签打开.
所以把页面级调试.
<ui:debug hotkey="z" rendered="true" />
Run Code Online (Sandbox Code Playgroud)
调试结果现在在另一个窗口中打开,但不加载组件树信息(尽管显示了范围变量).
我一直在阅读一些关于javax.faces.default_suffix的帖子,但在尝试实现它时没有成功.
使用:jsf 2.0,jboss 7.1,Mojarra 2.1.5
web.xml中
<welcome-file-list>
<welcome-file>/comum/inicio/index.xhtml</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern> **have tried *.jsf but with no success**
</servlet-mapping>
<context-param>
<param-name>javax.faces.DEFAULT_SUFFIX</param-name>
<param-value>.jsf</param-value>
</context-param>
Run Code Online (Sandbox Code Playgroud)
你能帮我解决这个问题吗?谢谢
我发现如果我在panelgrid标签内添加注释,它将<td>为它生成一个空.我找到了关于这个问题的链接:https: //java.net/jira/browse/JAVASERVERFACES-1768.根据此链接,它不是一个错误,并标记为WONTFIX.在链接中,有人提供了这些解决方法,我想知道是否有比这些更好的解决方案:
如果您根本不想保留它们,请让Facelets忽略所有注释.有一个javax.faces.FACELETS_SKIP_COMMENTS开关web.xml.
<h:panelGroup>如果要保留注释,请将注释移动到.
使用<ui:remove><!-- first column --></ui:remove>,您也可以忽略XML注释风格并提出更高级的东西.
在给定的情况下,我想将Facelet与不同的ManagedBeans一起使用,因此About操作bean作为参数给出:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html
xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html" >
<h:body>
<ui:include src="ratings.xhtml" >
<ui:param name="createAction" value="#{myOneCreateAction}" />
<ui:param name="ratings" value="#{context.ratings}" />
</ui:include>
</h:body>
</html>
Run Code Online (Sandbox Code Playgroud)
我给create动作作为参数value="#{myOneCreateAction}"。
在该构面中,一个组件也在其他页面上多次使用-因此,我尝试在复合组件中对其进行重构。
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:io="http://java.sun.com/jsf/composite/inoutComponents">
<ui:composition>
<rich:dataTable id="ratingTblId"
value="#{ratings}"
var="rating">
<rich:column>
<io:removeButton
id="removeButton"
actionMethod="#{createAction.removeRating}"
immediate="true"
render=":#{rich:clientId('ratingTblId')}" />
<h:commandButton
id="removeButton2"
actionListener="#{createAction.removeRating}"
immediate="true" >
<f:ajax render="ratingTblId" />
</h:commandButton>
</rich:column>
</rich:dataTable>
</ui:composition>
</html>
Run Code Online (Sandbox Code Playgroud)
参见,如何actionMethod="#{createAction.removeRating}"针对组件给出方法。该组件本身如下所示:
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:cc="http://java.sun.com/jsf/composite">
<!-- INTERFACE --> …Run Code Online (Sandbox Code Playgroud) 我正在探索JSF 2.2中的新功能(到目前为止非常酷),但我仍然不明白受保护的视图是如何工作的,我创建了一个带有facelet2链接的facelet1,如下所示:
<h:link styleClass="link" value="Go to protected page" id="link1"
outcome="/protected/facelet2.xhtml"></h:link>
Run Code Online (Sandbox Code Playgroud)
在我的faces-config.xml中我添加了这个:
<protected-views>
<url-pattern>/protected/facelet2.xhtml</url-pattern>
</protected-views>
Run Code Online (Sandbox Code Playgroud)
现在,当我运行页面时,在URL中添加了一个标记:
http://localhost:8080/<project>/protected/facelet2.faces?javax.faces.Token=1426608965211
Run Code Online (Sandbox Code Playgroud)
根据文档,如果令牌与服务器中的令牌不匹配,则不处理GET请求(我的理解是否正确?).
但是,如果我修改令牌(使用Firebug或浏览器中包含的开发工具),即使令牌已被修改,仍会处理请求.
难道我做错了什么?