我一直在使用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请求上都能正常工作,只是我无法从它们发布。
到目前为止,我找不到任何解决方案/答案 我真的很感激任何帮助 非常感谢!
答案 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'='最新最好'。 :)