使用 JSF 将参数传递给 dropzone save 方法
Pass a parameter to dropzone save method using JSF
我已经写了关于如何使用 dropzone.js 和 JSF () 的问题,BalusC 正确回答了它。
但是我想将参数传递给 save() 方法,但我做不到。我在类似于此的页面中有 dropzone 组件:
http://localhost:8080/application/image-album.xhtml?albumId=1
在那个页面我有:
<h:form id="uploadForm" enctype="multipart/form-data" styleClass="dropzone">
<div class="fallback">
<h:inputFile id="file" value="#{uploadImageController.part}"/>
<h:commandButton id="submit" value="submit" />
</div>
</h:form>
在 UploadImageController 中我有:
@PostConstruct
public void init() {
ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
albumId = Long.valueOf(externalContext.getRequestParameterMap().get("albumId"));
}
所以理论上我可以在 save() 方法中使用 albumId。但是,init() 方法被调用了三次,第一次的值为 1,另外两次的值为 null,因此它因 NullPointerException 而失败。
有什么解决方法吗?
GET请求参数可以设置为bean 属性 using <f:viewParam>
.
<f:metadata>
<f:viewParam name="albumId" value="#{bean.albumId}" />
</f:metadata>
如果您正在使用 @ViewScoped
bean,那么在同一视图上的所有 JSF POST 表单提交(回发)中都会记住这一点。但是,如果您使用的是 @RequestScoped
bean,则可以使用 <h:inputHidden>
.
在回传中保留 bean 属性
<h:form ...>
<h:inputHidden value="#{bean.albumId}" />
...
</h:form>
只有当表单出现 conversion/validation 错误时,这才会正常工作。如果你在同一个表格上使用 conversion/validation,那么最好使用普通的 HTML <input type="hidden">
.
<h:form ...>
<input type="hidden" name="albumId" value="#{bean.albumId}" />
...
</h:form>
<f:viewParam>
将注意正确设置 bean 属性。无需使用 getRequestParameterMap()
老式的 JSF 1.x 方式手动 fiddle。
另请参阅:
- What can <f:metadata>, <f:viewParam> and <f:viewAction> be used for?
- How to retain f:viewParam values after postback with validation failed
- How to choose the right bean scope?
我已经写了关于如何使用 dropzone.js 和 JSF (
但是我想将参数传递给 save() 方法,但我做不到。我在类似于此的页面中有 dropzone 组件: http://localhost:8080/application/image-album.xhtml?albumId=1
在那个页面我有:
<h:form id="uploadForm" enctype="multipart/form-data" styleClass="dropzone">
<div class="fallback">
<h:inputFile id="file" value="#{uploadImageController.part}"/>
<h:commandButton id="submit" value="submit" />
</div>
</h:form>
在 UploadImageController 中我有:
@PostConstruct
public void init() {
ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
albumId = Long.valueOf(externalContext.getRequestParameterMap().get("albumId"));
}
所以理论上我可以在 save() 方法中使用 albumId。但是,init() 方法被调用了三次,第一次的值为 1,另外两次的值为 null,因此它因 NullPointerException 而失败。
有什么解决方法吗?
GET请求参数可以设置为bean 属性 using <f:viewParam>
.
<f:metadata>
<f:viewParam name="albumId" value="#{bean.albumId}" />
</f:metadata>
如果您正在使用 @ViewScoped
bean,那么在同一视图上的所有 JSF POST 表单提交(回发)中都会记住这一点。但是,如果您使用的是 @RequestScoped
bean,则可以使用 <h:inputHidden>
.
<h:form ...>
<h:inputHidden value="#{bean.albumId}" />
...
</h:form>
只有当表单出现 conversion/validation 错误时,这才会正常工作。如果你在同一个表格上使用 conversion/validation,那么最好使用普通的 HTML <input type="hidden">
.
<h:form ...>
<input type="hidden" name="albumId" value="#{bean.albumId}" />
...
</h:form>
<f:viewParam>
将注意正确设置 bean 属性。无需使用 getRequestParameterMap()
老式的 JSF 1.x 方式手动 fiddle。
另请参阅:
- What can <f:metadata>, <f:viewParam> and <f:viewAction> be used for?
- How to retain f:viewParam values after postback with validation failed
- How to choose the right bean scope?