标签: facelets

url编码的字符被webflow/EL/JSF错误地解析

当我从网页上提交角色Ö后,后端收到了Ã.该网页是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.

我有什么想法开始寻找?

jsf spring facelets character-encoding spring-webflow

5
推荐指数
1
解决办法
2827
查看次数

jsf 2.0在GET参数验证失败后返回http错误代码

我有这个本地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中找不到任何"失败"的页面.在其他地方?

jsf facelets

5
推荐指数
1
解决办法
2536
查看次数

使用Facelets模板导航无法正常工作

使用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文件似乎没有与之关联的任何样式信息.文档树如下所示.

任何提示将不胜感激.

navigation jsf facelets

5
推荐指数
1
解决办法
4262
查看次数

如何将布尔属性绑定到呈现的属性?

boolean在JSF托管bean中使用属性,并且根据其值,我必须在facelet上呈现命令链接.但问题是facelets显示此错误:

在我的支持bean上找不到属性'isPlayButtonEnabled'

所以,我从改变属性的数据类型测试的代码booleanString.然后facelets没有显示任何错误.但是命令链接组件未在视图中呈现.这是怎么造成的,我该如何解决?

jsf facelets el

5
推荐指数
1
解决办法
1万
查看次数

AJAX渲染属性不适用于rendered ="false"组件

我有一个组件,我想在用户点击后显示/隐藏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我的按钮属性的值.它明确地征服了两者:explanationshowButton.

只要showButton始终存在(它只更改其标签),explanation仅当wasPressed属性为true 时才存在.否则它说:

malformedXML:更新期间:找不到解释

我怎么解决这个问题?

我不想恢复隐藏源代码中的元素,所以我不想使用任何jQuery切换( - )或任何使用style="display: none"或任何这些东西隐藏元素的方式.

它甚至可以在JSF 2.1中实现吗?

ajax facelets show-hide java-ee-6 jsf-2

5
推荐指数
1
解决办法
8479
查看次数

facelet调试模式不起作用

我在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)

调试结果现在在另一个窗口中打开,但不加载组件树信息(尽管显示了范围变量).

java jsf facelets

5
推荐指数
1
解决办法
591
查看次数

javax.faces.DEFAULT_SUFFIX无效

我一直在阅读一些关于javax.faces.default_suffix的帖子,但在尝试实现它时没有成功.

使用:jsf 2.0,jboss 7.1,Mojarra 2.1.5

  • 我需要在URL中显示以下内容:localhost:8080/myproject/index.jsf
  • 导航时还需要显示xxx.jsf

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)

你能帮我解决这个问题吗?谢谢

navigation jsf web.xml servlets facelets

5
推荐指数
1
解决办法
5816
查看次数

如何在h:panelGrid中添加注释而不会导致它生成空TD

我发现如果我在panelgrid标签内添加注释,它将<td>为它生成一个空.我找到了关于这个问题的链接:https: //java.net/jira/browse/JAVASERVERFACES-1768.根据此链接,它不是一个错误,并标记为WONTFIX.在链接中,有人提供了这些解决方法,我想知道是否有比这些更好的解决方案:

  1. 如果您根本不想保留它们,请让Facelets忽略所有注释.有一个javax.faces.FACELETS_SKIP_COMMENTS开关web.xml.

  2. <h:panelGroup>如果要保留注释,请将注释移动到.

  3. 使用<ui:remove><!-- first column --></ui:remove>,您也可以忽略XML注释风格并提出更高级的东西.

facelets jsf-2

5
推荐指数
0
解决办法
813
查看次数

Managed Bean as Facelet参数使复合组件无法解析

在给定的情况下,我想将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 facelets composite-component jsf-2

5
推荐指数
1
解决办法
1516
查看次数

操作CSRF令牌后仍可访问<protected-views>中声明的视图

我正在探索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或浏览器中包含的开发工具),即使令牌已被修改,仍会处理请求.

难道我做错了什么?

jsf facelets jsf-2.2 protected-views

5
推荐指数
1
解决办法
1391
查看次数