有时,使用时<h:commandLink>,<h:commandButton>或者<f:ajax>,在action,actionListener或listener与标签相关的方法根本不被调用.或者,bean属性不会使用提交的UIInput值进行更新.
有什么可能的原因和解决方案?
如果我们在WAR自己定义特定于webapp的servlet过滤器web.xml,那么过滤器的执行顺序将与它们在中定义的顺序相同web.xml.
但是,如果我们使用@WebFilter注释定义这些过滤器,过滤器的执行顺序是什么,我们如何确定执行顺序?
这似乎不对.我正在清理我的代码,我只是注意到了这一点.每个ajax请求都会触发构造函数和@PostConstruct我的@ViewScopedbean.即使是简单的数据库分页也会触发它.
我知道这@ViewScoped比@RequestScoped任何请求都要重建并且不应该重建.只有在通过GET重新加载完整页面之后.
重要提示:此线程中讨论的问题已于2014年10月6日星期一(几分钟前)发布的PrimeFaces 5.1 final(社区发布)中得到修复.我尝试了JSF 2.2.8-02(或api,impl).
因此,如果您碰巧使用该版本(或更高版本,无需提及),您甚至不需要再阅读此问题了.
我正在运行一个Web应用程序
除了使用AJAX上传文件外,其他一切都运行良好.以下xhtml文件通过PrimeFaces命令按钮触发的AJAX请求发送多部分内容.
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:p="http://primefaces.org/ui"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<title>Test</title>
</h:head>
<h:body>
<h:form prependId="true" enctype="multipart/form-data">
<p:fileUpload id="txtCatImage"
value="#{testManagedBean.uploadedFile}"
mode="advanced"
dragDropSupport="true"
fileLimit="1"
sizeLimit="100000"
multiple="false"
allowTypes="/(\.|\/)(gif|jpe?g|png)$/"
fileUploadListener="#{testManagedBean.fileUploadListener}"/>
<p:message for="txtCatImage" showSummary="false"/>
<p:commandButton id="btnSubmit"
actionListener="#{testManagedBean.insert}"
ajax="true" icon="ui-icon-check" value="Save"/>
</h:form>
</h:body>
</html>
Run Code Online (Sandbox Code Playgroud)
测试托管bean:
@ManagedBean
@ViewScoped
public final class TestManagedBean implements Serializable {
private static final long serialVersionUID = …Run Code Online (Sandbox Code Playgroud) 我在JSF上传文件.我正在使用Tomahawk <t:inputFileUpload>,但同样的问题适用于例如PrimeFaces <p:fileUpload>和JSF 2.2 <h:inputFile>.
我有以下支持bean代码:
private UploadedFile uploadedFile; // +getter+setter
public String save() throws IOException {
String name = uploadedFile.getName();
System.out.println("File name: " + name);
String type = uploadedFile.getContentType();
System.out.println("File type: " + type);
long size = uploadedFile.getSize();
System.out.println("File size: " + size);
InputStream stream = uploadedFile.getInputStream();
byte[] buffer = new byte[(int) size];
stream.read(buffer, 0, (int) size);
stream.close();
}
Run Code Online (Sandbox Code Playgroud)
我能够获取文件名,类型和大小,但我无法将此文件保存在特定路径中.我无法找出保存上传文件的正确方法.我怎样才能做到这一点?
我正在尝试将基于JSF的应用程序部署到Tomcat 6.我的构建系统的设置方式,WAR本身没有任何库,因为该服务器共提供43个应用程序.而是将库复制到共享库文件夹中并在应用程序之间共享.部署时,我收到此错误
SEVERE: Error deploying configuration descriptor SSOAdmin.xml
java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/faces/webapp/FacesServlet
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1667)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
at org.apache.catalina.startup.WebAnnotationSet.loadApplicationServletAnnotations(WebAnnotationSet.java:108)
at org.apache.catalina.startup.WebAnnotationSet.loadApplicationAnnotations(WebAnnotationSet.java:58)
at org.apache.catalina.startup.ContextConfig.applicationAnnotationsConfig(ContextConfig.java:297)
at org.apache.catalina.startup.ContextConfig.start(ContextConfig.java:1078)
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:261)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:142)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4611)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:799)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:779)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:601)
at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:675)
at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:601)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:502)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1315) …Run Code Online (Sandbox Code Playgroud) 我正在使用PrimeFaces 3.5和JSF 2.0.我想使用jQuery插件,所以我在我的webapp中包含了jQuery.
<h:head>
<h:outputScript name="js/jquery.min.js" />
<h:outputScript name="js/jquery-ui.js" />
</h:head>
Run Code Online (Sandbox Code Playgroud)
但是,在使用PrimeFaces组件时,我会收到类似未捕获的类型错误:
未捕获的TypeError:无法读取未定义的属性"长度"
未捕获的TypeError:对象[object Object]没有方法'autocomplete'
未捕获的TypeError:无法读取未定义的属性'keyCode'
未捕获的TypeError:this.jq.draggable不是函数
未捕获的TypeError:无法读取未定义的属性"LinearAxisRenderer"
未捕获的TypeError:对象[object Object]没有方法'fileupload'
未捕获的TypeError:this.jqEl.datetimepicker不是函数
等等.
这是怎么造成的,我该如何解决?
我想在我的JSF应用程序中上传一个文件.我正在使用Filter和HttpServletRequestWrapper访问上传文件.
public MultipartRequestWrapper(HttpServletRequest request) {
super(request);
System.out.println("Created multipart wrapper....");
try {
System.out.println("Looping parts"+getParts().size());
for (Part p : getParts()) {
System.out.println(String.format("Part name: %1$s, contentType : %2$s", p.getName(), p.getContentType()));
for(String header : p.getHeaderNames()){
System.out.println("Header name : " + header + ", value : " + p.getHeader(header));
}
byte[] b = new byte[(int) p.getSize()];
p.getInputStream().read(b);
params.put(p.getName(), new String[]{new String(b)});
}
} catch (IOException ex) {
ex.printStackTrace();
Logger.getLogger(MultipartRequestWrapper.class.getName()).log(Level.SEVERE, null, ex);
} catch (ServletException ex) {
ex.printStackTrace();
Logger.getLogger(MultipartRequestWrapper.class.getName()).log(Level.SEVERE, null, ex);
} …Run Code Online (Sandbox Code Playgroud) 我正面临着<p:fileUpload>PrimeFaces 的问题.我创建了一个Facelet页面来上传文件,如下所示:
<h:form id="welcomeForm">
<p:fileUpload value="#{fileUploadController.uploadedFile}" mode="simple" />
<h:commandButton value="Submit" action="#{fileUploadController.submit}" />
<h:message for="welcomeForm" />
</h:form>
Run Code Online (Sandbox Code Playgroud)
和一个支持bean如下:
public class FileUploadController {
private UploadedFile uploadedFile;
public FileUploadController() {
}
public UploadedFile getUploadedFile() {
return uploadedFile;
}
public void setUploadedFile(UploadedFile uploadedFile) {
this.uploadedFile = uploadedFile;
}
public void submit() {
// Get information you from the uploaded file
System.out.println("Uploaded file name : " + uploadedFile);
}
}
Run Code Online (Sandbox Code Playgroud)
当我单击Submit按钮时,submit()会调用该方法,但结果如下:
信息:上传的文件名:null
这是怎么造成的,我该如何解决?
我正在尝试像primefaces用户指南中记录的那样工作,并在那里创建了一些帖子.
环境是:javaee full + jpa + jsf 2.2 + primefaces 4 + glassfish v4
我再次发帖,因为我已经尝试了我在网上找到的每一个样本和建议,都没有成功.
我能够使用:event.getFile.getFileName获取文件上传名称,但内容始终为null
- - - - - - -更新 - - - - - - - - - - - - - -
我的xhtml页面:
<h:form enctype="multipart/form-data">
<p:outputLabel value="La photo :"/>
<p:fileUpload fileUploadListener="#{personController.upload}"
mode="advanced"
update="messages"
sizeLimit="100000"
allowTypes="/(\.|\/)(gif|jpe?g|png)$/"/>
<p:growl id="messages" showDetail="true"/>
</h:form>
Run Code Online (Sandbox Code Playgroud)
我的托管bean:
@Named(value = "personController")
@SessionScoped
public class PersonController implements Serializable {
/**
* Creates a new instance of PersonController
*/
@Inject
private PersonneFacade …Run Code Online (Sandbox Code Playgroud) jsf ×8
file-upload ×4
primefaces ×4
jsf-2 ×3
servlets ×2
tomcat ×2
action ×1
commandlink ×1
constructor ×1
glassfish-4 ×1
installation ×1
java ×1
java-ee ×1
jquery ×1
jsf-2.2 ×1
managed-bean ×1
maven ×1
save ×1
typeerror ×1
view-scope ×1
web.xml ×1