【问题标题】:Different rules for the same view-id PrettyFaces相同视图 ID PrettyFaces 的不同规则
【发布时间】:2013-01-16 18:43:58
【问题描述】:

我有一个 jsf 页面,它接收 2 到 6 个参数,我想让这个 url 看起来更好,所以我开始使用漂亮的面孔。当我为 2 个参数创建规则时,一切正常,但是当我创建第二个规则时,页面也可以正常工作,url 正确,但我在 Eclipse 控制台中收到错误消息。 我认为这是因为我正在尝试为相同的 view-id 创建规则……这可能吗?

漂亮的配置:

  <url-mapping id="departamento">
   <pattern value="/#{codDep}/#{departamento} " />
   <view-id value="/departamento.jsf" />
  </url-mapping>

 <url-mapping parentId="departamento" id="sessao">
  <pattern value="/#{codSec}/#{secao}" />
  <view-id value="/departamento.jsf" />
 </url-mapping>

控制台错误:

java.lang.NumberFormatException: For input string: "javax.faces.resource"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:492)
at java.lang.Integer.parseInt(Integer.java:527)
at project.Controller.inicializar(Controller.java:82)

控制器方法:

 public void inicializar(ComponentSystemEvent event)
{
FacesContext context = FacesContext.getCurrentInstance();
if (!context.isPostback())
{

    departamento = new Departamento(Integer.parseInt(codigoDepartamento), descricaoDepartamento, null, null);
    }
  }

问题是它不应该传递这个参数“javax.faces.resource” 有时是“css”,我什至不知道它来自哪里。

【问题讨论】:

    标签: java jsf-2 prettyfaces


    【解决方案1】:

    我猜这是因为 JSF 资源请求(包含 javax.faces.resource)与您的模式之一匹配。 PrettyFaces 拦截请求并将请求路径的一部分写入您的 bean。

    你必须改变你的模式,使它只匹配你想要的 URL,而不是像 JSF 资源、CSS 或图像文件这样的东西。您可以添加一些独特的固定字符串前缀,例如 /dep/,如下所示:

    <url-mapping id="departamento">
      <pattern value="/dep/#{codDep}/#{departamento} " />
      <view-id value="/departamento.jsf" />
    </url-mapping>
    

    或限制路径参数允许的值。例如,如果codDep 是一个数字,您可以使用:

    <url-mapping id="departamento">
      <pattern value="/#{ /[0-9]+/ codDep }/#{departamento} " />
      <view-id value="/departamento.jsf" />
    </url-mapping>
    

    有关详细信息,请参阅 PrettyFaces 文档的这一部分:

    http://ocpsoft.org/docs/prettyfaces/3.3.3/en-US/html/Configuration.html#config.pathparams.regex

    【讨论】:

    • 谢谢@chkal,我在你回答之前做了你的第一个建议,它有效,我现在试试第二个。只是另一个问题,我可以检索第一个参数 (#{codDep} 但使用漂亮的面孔隐藏它吗?因为它是一个数字,我不喜欢我的网址像:www.url.com/1/departamento 另外,因为在我的第二条规则是:例如,www.url.com/1/departamento/2/item。但我无法删除参数,因为我在需要此参数来搜索数据库的类中使用了 preRenderView。任何建议?提前谢谢。
    • 如果您需要 ID 来加载数据库条目,那么您还必须将其包含在 URL 中。这就是 PrettyFaces 的想法。可添加书签的 URL,包括应用程序呈现页面所需知道的任何内容。如果您不想包含 id 并且部门名称是唯一的,您可以考虑更改数据库查询以使用名称而不是 id 来加载它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-05
    相关资源
    最近更新 更多