我正在尝试使用a4j:actionParam标记重置表单中的某些值。但它接缝的空值永远不会到达目标bean。转换器正确接收它,返回null,但它永远不会在bean中设置。
目标是为不同的预定义值(上周,上个月等)填写start和endDate。对于“本周”值,必须将endDate重置为null。
<rich:menuItem value="Last week">
<a4j:support event="onclick" reRender="criteriaStartCalendar,criteriaEndCalendar">
<a4j:actionparam name="startDate" value="#{dateBean.lastWeekStart}" assignTo="#{targetBean.startDate}" />
<a4j:actionparam name="endDate" value="#{dateBean.lastWeekEnd}" assignTo="#{targetBean.endDate}" />
</a4j:support>
</rich:menuItem>
答案 0 :(得分:1)
我刚刚发现了这一点。 A4J中UIActionParameter的processAction方法忽略空值。
public void processAction(ActionEvent actionEvent)
throws AbortProcessingException {
FacesContext context = getFacesContext();
ELContext elContext = context.getELContext();
ValueExpression updateBinding = getAssignToBinding();
if (updateBinding != null && (!updateBinding.isReadOnly(elContext))) {
Object requestValue = context.getExternalContext()
.getRequestParameterMap().get(getName());
if (requestValue != null && requestValue instanceof String) {
Class<?> type = updateBinding.getType(elContext);
Converter converter = createConverter(context, type);
if (null != converter) {
requestValue = converter.getAsObject(context, this,
(String) requestValue);
}
}
// null is explicitly ignored!
if (null != requestValue) {
updateBinding.setValue(elContext, requestValue);
}
MethodExpression listener = getActionListener();
if (listener != null) {
listener.invoke(elContext, new Object[] {actionEvent});
}
}
}
目前正在考虑解决这个问题的最佳方法!