diff --git a/src/main/java/org/primefaces/component/button/ButtonRenderer.java b/src/main/java/org/primefaces/component/button/ButtonRenderer.java index 63c0589c7..1c6fe2f85 100644 --- a/src/main/java/org/primefaces/component/button/ButtonRenderer.java +++ b/src/main/java/org/primefaces/component/button/ButtonRenderer.java @@ -99,7 +99,7 @@ protected String buildOnclick(FacesContext context, Button button) { onclick.append(userOnclick).append(";"); } - String onclickBehaviors = getEventBehaviors(context, button, "click"); + String onclickBehaviors = getEventBehaviors(context, button, "click", null); if(onclickBehaviors != null) { onclick.append(onclickBehaviors).append(";"); } diff --git a/src/main/java/org/primefaces/component/commandlink/CommandLinkRenderer.java b/src/main/java/org/primefaces/component/commandlink/CommandLinkRenderer.java index dd7938012..9e02f45c4 100644 --- a/src/main/java/org/primefaces/component/commandlink/CommandLinkRenderer.java +++ b/src/main/java/org/primefaces/component/commandlink/CommandLinkRenderer.java @@ -16,17 +16,22 @@ package org.primefaces.component.commandlink; import java.io.IOException; +import java.util.ArrayList; +import java.util.List; import javax.faces.FacesException; import javax.faces.component.UIComponent; +import javax.faces.component.behavior.ClientBehaviorContext; import javax.faces.context.FacesContext; import javax.faces.context.ResponseWriter; import javax.faces.event.ActionEvent; +import org.primefaces.component.api.ClientBehaviorRenderingMode; import org.primefaces.context.RequestContext; import org.primefaces.renderkit.CoreRenderer; import org.primefaces.util.CSVBuilder; import org.primefaces.util.ComponentUtils; +import org.primefaces.util.Constants; import org.primefaces.util.HTML; import org.primefaces.util.SharedStringBuilder; @@ -70,7 +75,8 @@ public void encodeEnd(FacesContext context, UIComponent component) throws IOExce onclick.append(link.getOnclick()).append(";"); } - String onclickBehaviors = getEventBehaviors(context, link, "click"); + + String onclickBehaviors = getEventBehaviors(context, link, "click", null); if(onclickBehaviors != null) { onclick.append(onclickBehaviors); } @@ -111,7 +117,9 @@ public void encodeEnd(FacesContext context, UIComponent component) throws IOExce writer.writeAttribute("onclick", onclick.toString(), "onclick"); } - String dialogReturnBehavior = getEventBehaviors(context, link, "dialogReturn"); + List behaviorParams = new ArrayList(); + behaviorParams.add(new ClientBehaviorContext.Parameter(Constants.CLIENT_BEHAVIOR_RENDERING_MODE, ClientBehaviorRenderingMode.UNOBSTRUSIVE)); + String dialogReturnBehavior = getEventBehaviors(context, link, "dialogReturn", behaviorParams); if(dialogReturnBehavior != null) { writer.writeAttribute("data-dialogreturn", dialogReturnBehavior, null); } diff --git a/src/main/java/org/primefaces/component/panelgrid/PanelGridRenderer.java b/src/main/java/org/primefaces/component/panelgrid/PanelGridRenderer.java index 066b8159e..541a5092c 100644 --- a/src/main/java/org/primefaces/component/panelgrid/PanelGridRenderer.java +++ b/src/main/java/org/primefaces/component/panelgrid/PanelGridRenderer.java @@ -80,18 +80,18 @@ public void encodeDynamicBody(FacesContext context, PanelGrid grid, int columns) writer.writeAttribute("class", PanelGrid.ROW_CLASS, null); writer.writeAttribute("role", "row", null); } - + + String columnClass = (colMod < columnClasses.length) ? PanelGrid.CELL_CLASS + " " + columnClasses[colMod].trim() : PanelGrid.CELL_CLASS; + writer.startElement("td", null); + writer.writeAttribute("role", "gridcell", null); + writer.writeAttribute("class", columnClass, null); if(child.isRendered()) { - String columnClass = (colMod < columnClasses.length) ? PanelGrid.CELL_CLASS + " " + columnClasses[colMod].trim() : PanelGrid.CELL_CLASS; - writer.startElement("td", null); - writer.writeAttribute("role", "gridcell", null); - writer.writeAttribute("class", columnClass, null); child.encodeAll(context); - writer.endElement("td"); - - i++; - colMod = i % columns; } + writer.endElement("td"); + + i++; + colMod = i % columns; if(colMod == 0) { writer.endElement("tr"); diff --git a/src/main/java/org/primefaces/component/splitbutton/SplitButtonRenderer.java b/src/main/java/org/primefaces/component/splitbutton/SplitButtonRenderer.java index 61bd1f01e..43f2072a1 100644 --- a/src/main/java/org/primefaces/component/splitbutton/SplitButtonRenderer.java +++ b/src/main/java/org/primefaces/component/splitbutton/SplitButtonRenderer.java @@ -187,7 +187,7 @@ protected String buildOnclick(FacesContext context, SplitButton button) throws I onclick.append(buildNonAjaxRequest(context, button, form, null, false)); } - String onclickBehaviors = getEventBehaviors(context, button, "click"); + String onclickBehaviors = getEventBehaviors(context, button, "click", null); if(onclickBehaviors != null) { onclick.append(onclickBehaviors).append(";"); } diff --git a/src/main/java/org/primefaces/renderkit/CoreRenderer.java b/src/main/java/org/primefaces/renderkit/CoreRenderer.java index e44aff6a4..fe1d5f3aa 100644 --- a/src/main/java/org/primefaces/renderkit/CoreRenderer.java +++ b/src/main/java/org/primefaces/renderkit/CoreRenderer.java @@ -562,14 +562,19 @@ protected String escapeText(String text) { return sb.toString(); } - protected String getEventBehaviors(FacesContext context, ClientBehaviorHolder cbh, String event) { + protected String getEventBehaviors(FacesContext context, ClientBehaviorHolder cbh, String event, List parameters) { List behaviors = cbh.getClientBehaviors().get(event); StringBuilder sb = SharedStringBuilder.get(context, SB_GET_EVENT_BEHAVIORS); if(behaviors != null && !behaviors.isEmpty()) { UIComponent component = (UIComponent) cbh; String clientId = component.getClientId(context); - List params = Collections.emptyList(); + List params; + if(parameters != null && !parameters.isEmpty()) { + params = parameters; + } else { + params = Collections.emptyList(); + } for (int i = 0; i < behaviors.size(); i++) { ClientBehavior behavior = behaviors.get(i); diff --git a/src/main/java/org/primefaces/webapp/filter/FileUploadFilter.java b/src/main/java/org/primefaces/webapp/filter/FileUploadFilter.java index f1eb5ee94..3f284dcdd 100644 --- a/src/main/java/org/primefaces/webapp/filter/FileUploadFilter.java +++ b/src/main/java/org/primefaces/webapp/filter/FileUploadFilter.java @@ -30,7 +30,9 @@ import javax.servlet.http.HttpServletRequest; import org.apache.commons.fileupload.disk.DiskFileItemFactory; +import org.apache.commons.fileupload.servlet.FileCleanerCleanup; import org.apache.commons.fileupload.servlet.ServletFileUpload; +import org.apache.commons.io.FileCleaningTracker; import org.primefaces.util.Constants; import org.primefaces.webapp.MultipartRequest; @@ -85,6 +87,11 @@ public void doFilter(ServletRequest request, ServletResponse response, FilterCha if(uploadDir != null) { diskFileItemFactory.setRepository(new File(uploadDir)); } + + FileCleaningTracker fileCleaningTracker = FileCleanerCleanup.getFileCleaningTracker(request.getServletContext()); + if(fileCleaningTracker != null) { + diskFileItemFactory.setFileCleaningTracker(fileCleaningTracker); + } ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory); MultipartRequest multipartRequest = new MultipartRequest(httpServletRequest, servletFileUpload); diff --git a/src/main/resources/META-INF/resources/primefaces/core/core.dialog.js b/src/main/resources/META-INF/resources/primefaces/core/core.dialog.js index 9c84fea9a..3c3ada19a 100644 --- a/src/main/resources/META-INF/resources/primefaces/core/core.dialog.js +++ b/src/main/resources/META-INF/resources/primefaces/core/core.dialog.js @@ -93,7 +93,7 @@ PrimeFaces.dialog.DialogHandler = { else if(sourceComponentId) { var dialogReturnBehaviorStr = $(document.getElementById(sourceComponentId)).data('dialogreturn'); if(dialogReturnBehaviorStr) { - dialogReturnBehavior = eval('(function(){' + dialogReturnBehaviorStr + '})'); + dialogReturnBehavior = eval('(function(ext){' + dialogReturnBehaviorStr + '})'); } }