1

我已经将 JSF (MyFaces) 与 PrettyFaces 一起使用了一段时间。一切正常,除了 POST 请求。

我唯一的问题是我无法向 PrettyFaces 重写的任何页面发出 POST 请求。我真的很感谢你的帮助,因为它是一个表演的终结者。

漂亮的配置.xml

<url-mapping id="market-view-item">
  <pattern value="/market/#{viewItem.itemId}" />
  <view-id value="/market/view-item.xhtml" />
</url-mapping>

pom.xml

<dependency>
  <groupId>org.ocpsoft.rewrite</groupId>
  <artifactId>rewrite-servlet</artifactId>
<version>2.0.5.Final</version>
</dependency>
<dependency>
  <groupId>org.ocpsoft.rewrite</groupId>
  <artifactId>rewrite-config-prettyfaces</artifactId>
  <version>2.0.5.Final</version>
</dependency>

我一直用到2.0.4.Final今天。我希望它可以通过升级到 2.0.5 来工作,但没有。

网页形式:

<h:form prependId="false">
  <p:inputTextarea rows="3" style="width:450px; margin:5px 0;" autoResize="false"/>
  <h:commandButton action="#{test.doSomething}" class="pg-button" value="Add comment"/>
</h:form>

CDI 豆:

@Named("test")
@RequestScoped
public class TestB {
    public void doSomething() {
        System.out.println("I work.........");
    }
}

任何想法为什么不执行 POST 请求?无论我做什么,它们都不会发生。完全没有错误。根本不值一提。

当我按下提交 ( Add comment) 按钮时,Chrome 会发出请求(ajax / non-ajax(我都尝试过)),但doSomething没有触发方法。

我也试过withing bean viewItem(漂亮配置中指定的那个),但没有。我尝试了 100 种方法……</p>

我不得不提一下,所有漂亮的面孔配置映射都可以在 GET 请求上完美运行,只是我无法从它们那里发布。

到目前为止,我找不到任何解决方案/答案。
我真的很感激任何帮助。
非常感谢!

4

2 回答 2

0


首先,感谢您的帮助。这很奇怪,这就是为什么我无法隔离问题(让它在另一个项目中发生),它不是在第一次尝试时执行 POST 请求,而是从第二次尝试执行。我已经删除了 web.xml 中的过滤器,没有任何区别。同样的行为。

我刚刚有了在 1.5.2 以外的其他 Tomee 版本中测试该项目的想法。令人惊讶的是,29.07.2013 的开发版本 1.6.0 似乎没有这个问题。为什么我没有早点想到这一点?:( 我必须为我的帖子功能编写单独的 Servlet 组件。啊啊啊!

好吧,这意味着不是 PrettyFaces 有问题(Huraay!),但可能是 Apache MyFaces,CDI impl。或Tomee中的其他内容。Uf...我很高兴它现在可以工作。

再次感谢您尝试提供帮助。

///////////////////////////////消息////////////////// //////////////////
似乎它在其他版本的Tomee中都没有用。问题在于该页面中有 ac:forEach(在该页面中使用的自定义组件内),即使 commandButton 不在循环内。通过切换到 ui:repeat,问题在所有版本的 Tomee 中都消失了。

这可能是 MyFaces 中的一个错误,因为 Glassfish 3.1.2.2(带有 Majorra)没有这个问题。(已测试)

///////////////////////////新闻2/////////////// ///////////////
哈……更有趣。
如果 h:form 在 c:forEach 之后,第一次尝试不会触发 POST 方法。它从第二次尝试开始。那是原来的问题。

如果 h:form 在 c:forEach 之前,则从第一次/单击开始正确执行 Post 方法(表单的操作)。

于 2013-08-10T15:21:08.810 回答
0

CDI 豆:

@Named("test")
@RequestScoped
public class TestB {
    public void doSomething() {
        System.out.println("I work.........");
    }
}

您的“CDI”bean 是否可能缺少构造函数方法,这可能会导致这里出现问题?

我从 TomEE+ 1.5.1 'SNAPSHOT' 开始就一直在使用 TomEE+,然后我在 TomEE+ 1.5.2 'SNAPSHOT' 可用后立即迁移到了 TomEE+ 1.6.0 'SNAPSHOT',并且总是尝试使用最新版本的“SNAPSHOT”JAR 文件。我只以这种方式使用“SNAPSHOT”版本,并且“SNAPSHOT”=“最新最好的”。:)

于 2013-08-11T10:34:03.023 回答