It is pretty simple... here is the validator class...
public class SelectOneMenuValueValidator implements Validator {
private static final Log LOGGER =
LogFactory.getLog(SelectOneMenuValueValidator.class);
public void validate(FacesContext context, UIComponent component,
Object value) {
LOGGER.debug("Validating select menu: " + component.getId() +
'=' + value);
boolean isSelected = false;
if (value instanceof Integer) {
int selectedId = (Integer) value;
if (selectedId >= 0) {
isSelected = true;
}
} else if (value instanceof String) {
isSelected = !"".equals(value);
}
if (!isSelected) {
LocalizationService userLocalizationService =
FacesContextHelper.getUserLocalizationService(context);
String errorMsgKey = "validator.invalidSelectOne";
String msg =
userLocalizationService.getLocalizedMessage(errorMsgKey);
String msgDetail =
userLocalizationService.getLocalizedMessage(errorMsgKey + "_detail");
FacesMessage message = new
FacesMessage(FacesMessage.SEVERITY_ERROR, msg, msgDetail);
throw new ValidatorException(message);
}
}
}
On 3/29/07, Mike Kienenberger <[EMAIL PROTECTED]> wrote:
That's pretty weird. It looks ok as far as I can tell.
I would also think that each component would have its own instance of
the validator.
Maybe there's something strange in your validator code? Are you
maintaining any kind of static state?
On 3/29/07, Jason Vincent <[EMAIL PROTECTED]> wrote:
> Hi all,
>
> I have two pulldown select menus that are using the same validator.
> when submitting the page, it appears that only the first select is
> getting validated and the second isn't validated at all. This was
> confirmed by placing a breakpoint on the "validate" method of my
> custom validator, called "selectOneMenuValueValidator".
>
> The validator is checking that the selected value isn't the first item
> in the list.
>
> Is there something I need to reset once the validation passes on the first
menu?
>
> Thanks,
> Jason
>
>
>
> <h:panelGrid columns="2" columnClasses="columnRight
> optionLabel, columnLeft">
> <h:outputText
value="#{messages['merchantStatus.status']}"/>
> <h:panelGroup>
> <h:selectOneMenu id="status"
> value="#{batchPartnerSetup$merchantStatus.selectedStatusId}">
> <f:selectItems
> value="#{batchPartnerSetup$merchantStatus.statusPulldown}"/>
> <f:validator
> validatorId="selectOneMenuValueValidator"/>
> </h:selectOneMenu>
> <h:message for="status"
> errorClass="validationError" fatalClass="validationError"
> warnClass="validationError"
> infoClass="validationError"/>
> </h:panelGroup>
> <h:outputText
> value="#{messages['merchantStatus.statusComment']}"/>
> <h:panelGroup>
> <h:selectOneMenu id="comment"
> value="#{batchPartnerSetup$merchantStatus.selectedStatusComment}">
> <f:selectItems
> value="#{batchPartnerSetup$merchantStatus.statusCommentPulldown}"/>
> <f:validator
> validatorId="selectOneMenuValueValidator"/>
> </h:selectOneMenu>
> <h:message for="comment"
> errorClass="validationError" fatalClass="validationError"
> warnClass="validationError"
> infoClass="validationError"/>
> </h:panelGroup>
> </h:panelGrid>
>