【发布时间】:2014-11-20 13:34:00
【问题描述】:
首先,我在 NetBeans 8.0 中使用 JSF 2.2.7 和 GlassFish 4。
其次,对不起,如果我遗漏了任何有用的信息。这是我在这里的第一个问题,所以我可能会忘记一些事情。另外,英语不是我的第一语言。抱歉有错别字/语法。
所以,这是我的问题:我正在使用 h:inputFile 上传文件,我需要一个 ajax 监听器。
在注意到它没有按我预期的那样工作后,我决定用一个打印“Test”的监听器进行一些测试,但它从来没有被 h:inputFile 触发。我已经尝试过使用 h:commandButton 和 h:commandLink 并且它们都可以正常工作。
为了进一步测试,我使用相同的测试代码创建了一个新项目,一切正常,包括 h:inputFile 中的侦听器。
我想知道的是为什么它在我的主项目中不起作用以及为什么它在测试项目中起作用。我在这里想念什么?我怎样才能让它在我的主要项目中发挥作用?
以下是我在寻找答案后尝试/检查过的一些(但不是全部,因为我迷路了):
- 没有嵌套表单。上述 xhtml 位于 ui:composition 中,但即使考虑到这一点,也没有嵌套表单。
- 它的表单有 enctype="multipart/form-data"
- 我尝试将方法更改为 uploadTest(AjaxBehaviorEvent event) 并将侦听器更改为 listener="#{submitFormBean.uploadTest}" [没有 ()]
- 我玩过各种 event="..." 和 execute="..."(没想到它会解决我的问题,但是,好吧,我必须尝试)
代码如下:
xhtml
<h:form>
<h:commandButton id="btnTest">
<f:ajax listener="#{submitFormBean.uploadTest()}"/>` --> works in both projects`
</h:commandButton>
</h:form>
<h:form>
<h:commandLink id="lnkTest" value="Test">
<f:ajax listener="#{submitFormBean.uploadTest()}"/>` --> works in both projects`
</h:commandLink>
</h:form>
<h:form enctype="multipart/form-data">
<h:inputFile id="fileTest">
<f:ajax listener="#{submitFormBean.uploadTest()}"/>` --> works only in test project`
</h:inputFile>
</h:form>
豆
@ViewScoped
@ManagedBean(name = "submitFormBean")
public class SubmitFormBean{
public SubmitFormBean() {
}
public void uploadTest(){
System.out.println("Test");
}
}
提前致谢!
【问题讨论】:
标签: ajax jsf file-upload