为什么JSF POST请求不适用于PrettyFaces

时间:2013-08-02 10:32:10

标签: jsf myfaces prettyfaces

我一直在使用JSF(MyFaces)和PrettyFaces。除了POST请求外,一切都很完美。

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

漂亮-config.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 bean:

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

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

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

我也尝试使用bean viewItem(在pretty config中指定的那个),但没有。我试过100种方式......

我必须提到所有漂亮的面孔配置映射在GET请求上都能正常工作,只是我无法从它们发布。

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

2 个答案:

答案 0 :(得分:0)


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

我刚刚想到在1.5.2以外的其他Tomee版本中测试项目。令人惊讶的是,从2013年7月29日开始,dev版本1.6.0似乎没有这个问题。我为什么不早点想到这个? :(我必须为我的帖子功能编写单独的Servlet组件.Aaaah!

嗯,这意味着不是PrettyFaces有问题(Huraay!),但可能是Apache MyFaces,CDI impl。或其他在Tomee。 呃...我很高兴它现在有效。

再次感谢您的帮助。

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

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

///////////////////////////////新闻2 ////////////// ////////////////////
哈......更有趣 如果h:form在c:forEach之后,则在第一次尝试时不会触发POST方法。它只是从第二次尝试起作用。这是最初的问题。

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

答案 1 :(得分:0)

CDI bean:

@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'='最新最好'。 :)