2

我有一个接收 2 到 6 个参数的 jsf 页面,我想让这个 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”,我什至不知道它来自哪里。

4

1 回答 1

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

于 2013-02-01T16:57:31.227 回答