2013-08-02 118 views
0

我一直在使用JSF(MyFaces)和PrettyFaces一段时间。除POST请求之外,一切正常。
为什么JSF POST请求不适用于PrettyFaces

我唯一的问题是,我不能让POST请求任何由PrettyFaces重写页面。 我真的很感激你的帮助,因为它是一个表演塞。

漂亮-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豆:

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

任何想法,为什么不执行POST请求?无论我做什么,他们都不会发生。没有错误。根本不值一提。当我按下提交(Add comment)按钮时,Chrome会发出一个请求(ajax/non-ajax(我都试过)),但方法doSomething不会被触发。

我试图withing豆viewItem也(在相当配置指定的),但没有。我试着在100种...

我不得不提,一切都非常面临配置映射在GET请求很好地工作,只是我无法将它们发布。

我找不到任何解决方案/回答这个直到现在。
我真的很感激任何帮助。
非常感谢!

+0

如果这真的是PrettyFaces问题,您应该先尝试。只需从pretty-config.xml文件中删除映射,然后使用原始URL“/market/view-item.xhtml”测试页面。在使用路径参数时,您必须在代码中硬编码一些有效的ID以进行简单的测试。如果这仍然不起作用,您还有其他问题。如果您的操作没有执行,通常是由回发期间渲染=“false”的某个父组件造成的。你也可以用SessionScoped替换RequestScoped,看看这是否有所作为。 – chkal

+1

我认为@chkal所说的是一个开始的好地方。如果这仍然存在问题,请在http://ocpsoft.org/support/的支持论坛上与我们联系,并上传一个可重现此问题的小型示例项目。我们将解决这个问题,并为您发布一个新版本,因为我们讨厌错误! :) – Lincoln

+0

嗨,伙计们!感谢您的帮助。 @chkal 页面.xhtml页面单独运行正常。 POST不适用于由PrettyFaces映射的链接。 SessionScoped不是我要找的。对于林肯: 我会尝试为此做一个示例项目。 – zmirc

回答

0


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

我刚刚在其他Tomee版本比1.5.2测试项目的想法。令人惊讶的是,从2013年7月29日开发的版本1.6.0似乎没有这个问题。我为什么不早点考虑这一点? (我必须为我的帖子功能编写单独的Servlet组件。)嗯,这意味着不是PrettyFaces有问题(Huraay!),但可能是Apache MyFaces,CDI impl或Tomee中的其他东西。 UF ...我很高兴的是,现在的工作。

再次感谢试图帮助。

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

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

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

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

0

CDI豆:

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

有没有可能是你的“CDI”豆缺乏构造函数方法和可以在此处导致的吗?我自TomEE + 1.5.1'SNAPSHOT'后一直使用TomEE +,然后我在迁移到TomEE + 1.5.0'SNAPSHOT'时立即迁移到TomEE + 1.5.2'SNAPSHOT',然后我迁移到TomEE + 1.6.0'SNAPSHOT',并始终尝试使用最新版本的“SNAPSHOT”JAR文件。我只用这种方式的'SNAPSHOT'版本,'SNAPSHOT'='最新最好的'。 :)

+0

谢谢,但正如我在Tomee的论坛中回答的,我不认为这是问题,因为所有的豆类在没有URL重写的页面上正常工作。 此外,所有java类默认都有一个空的构造函数,所以它似乎没有意义。 – zmirc

相关问题