0

我有一个有几个字段的 bean

@NotNull( message = "{ch.ethz.id.wai.doi.validation.doi.missingdoi}" )
@Pattern( regexp = "10\\.[\\d.]+/.*", message = "{ch.ethz.id.wai.doi.validation.doi.invalidDoi}" )
private String  doi;

@ManyToOne
@NotNull( message = "{ch.ethz.id.wai.doi.validation.doi.missingpool}" )
private DoiPool doiPool;

第一个注释在 JSF 中按预期工作

<h:inputText
    id       = "doi"
    value    = "#{detailModel.afterObject.doi}"
/>
<h:messages for="doi" style="clear: both; color: red;"/>

对于另一个字段,我有一个禁用的输入文本,我在其中放置了引用对象的名称。用户可以通过单击按钮并在单独的视图中选择它来指定对象。

<h:inputText
    id       = "doiPool"
    value    = "#{detailModel.afterObject.doiPool.name}"
    disabled = "true"
/>
<h:messages for="doiPool" style="clear: both; color: red;"/>

由于 theinputText不是指它的名字,detailModel.afterObject.doiPool而是指它的名字,所以什么也没有发生。

detailModel.afterObject.doiPool即使不能使用输入字段直接编辑,我如何强制验证?

4

2 回答 2

2

在处理表单提交期间会跳过禁用的输入。

disabled属性false在回发期间在呈现响应之外的其他阶段进行评估。

<h:inputText ... disabled="#{not facesContext.postback or facesContext.renderResponse}" />

这样,它将false在表单提交期间进行评估,从而被包含在处理中。

于 2013-02-15T12:15:32.320 回答
1

作为对 BalusC 答案的补充:

@NotNull是在对象上指定的,而DoiPool不是他的名字(显示在文本字段中)。为了使其工作,文本字段需要绑定到验证字段:

<h:inputText
  id       = "doiPool"
  value    = "#{detailModel.afterObject.doiPool}"
  disabled = "#{facesContext.renderResponse}"
>
    <f:converter converterId="ch.ethz.id.wai.doi.DoiPoolConverter"></f:converter>
</h:inputText>

转换器只是返回getName()对象的。

@FacesConverter( "ch.ethz.id.wai.doi.DoiPoolConverter" )
public class DoiPoolConverter implements Converter
{

    /**
     * This converter works only in the other direction.
     *
     * @return null
     */
    @Override
    public Object getAsObject( FacesContext facesContext, UIComponent uiComponent, String string )
    {
            return null;
    }

    @Override
    public String getAsString( FacesContext facesContext, UIComponent uiComponent, Object object )
    {
            if ( object instanceof DoiPool )
            {
                    return ( (DoiPool)object ).getName();
            }
            return null;
    }
}
于 2013-02-15T16:59:17.773 回答