当前位置: 首页 > 面试题库 >

JSF验证错误:值无效

充高扬
2023-03-14
问题内容

我知道这似乎很普通,但是我迷失了。单击评估.jsf中的“添加”按钮时发生。无论如何,我已经附上了我认为是相关的部分。

FWIW,我调试时未触发AssessmentType.equals()。

提前致谢。

j_idt38:j_idt47:j_idt48: Validation Error: Value is not valid

Assessment.xhtml:

        <h:form>
            <h:selectOneMenu value="#{assessmentBean.assessmentField}">
                <f:selectItems value="#{assessmentBean.assessment.type.fields}" />
            </h:selectOneMenu>

            <h:commandButton value="Add" action="#{assessmentBean.doAddField}">
                <f:param name="assessmentId"
                    value="#{assessmentBean.assessment.id}" />
            </h:commandButton>
        </h:form>

Assessment.jsf:

<form id="j_idt38:j_idt47" name="j_idt38:j_idt47" method="post" action="/jsf-web/edit/assessment.jsf" enctype="application/x-www-form-urlencoded"> 
<input type="hidden" name="j_idt38:j_idt47" value="j_idt38:j_idt47" /> 
<select name="j_idt38:j_idt47:j_idt48" size="1">    <option value="1">Presenting Condition</option> 
    <option value="2">Problem Duration</option> 
</select> 
<script type="text/javascript" src="/jsf-web/javax.faces.resource/jsf.js.jsf?ln=javax.faces"></script>
<input type="submit" name="j_idt38:j_idt47:j_idt50" value="Add" onclick="mojarra.jsfcljs(document.getElementById('j_idt38:j_idt47'),{'j_idt38:j_idt47:j_idt50':'j_idt38:j_idt47:j_idt50','assessmentId':'1'},'');return false" /><input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="3431661972220941645:6952134510589038883" autocomplete="off" /> 
</form>

AssessmentType.java:

import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.validation.constraints.NotNull;

import lombok.Data;

import org.hibernate.envers.Audited;

@Audited
@Data
@Entity
public class AssessmentType implements Comparable<AssessmentType> {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @NotNull
    private String name;

    @OneToMany( fetch=FetchType.EAGER, cascade = {CascadeType.PERSIST, CascadeType.MERGE}, targetEntity=AssessmentField.class )
    private List<AssessmentField> fields;

    @Override
    public int compareTo(final AssessmentType o) {
        return getId().compareTo(o.getId());
    }

    @Override
    public String toString() {
        return getName();
    }
}

AssessmentFieldConverter.java

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;
import javax.naming.InitialContext;
import javax.naming.NamingException;

import com.htu.fizio.api.AssessmentFieldManager;
import com.htu.fizio.domain.AssessmentField;

@FacesConverter(forClass = AssessmentField.class)
public class AssessmentFieldConverter implements Converter {

    AssessmentFieldManager<AssessmentField> assessmentFieldManager;

    @SuppressWarnings({ "unchecked", "rawtypes" })
    @Override
    public Object getAsObject(FacesContext ctx, UIComponent component, String value) {
        try {
            final InitialContext ic = new InitialContext();

            assessmentFieldManager = (AssessmentFieldManager) ic.lookup("fizio/AssessmentFieldManagerImpl/local");

            return assessmentFieldManager.find(Long.valueOf(value));
        } catch (NamingException e) {
            e.printStackTrace();
        }

        return null;
    }

    @Override
    public String getAsString(FacesContext ctx, UIComponent component, Object value) {
        return String.valueOf(((AssessmentField) value).getId());
    }
}

AssessmentBean.java

    import java.util.List;

    import javax.annotation.PostConstruct;
    import javax.ejb.EJB;
    import javax.faces.bean.ManagedBean;
    import javax.faces.bean.ManagedProperty;
    import javax.faces.bean.SessionScoped;

    import lombok.Getter;
    import lombok.Setter;

    import com.htu.fizio.api.AssessmentManager;
    import com.htu.fizio.domain.Assessment;
    import com.htu.fizio.domain.AssessmentField;
    import com.htu.fizio.domain.AssessmentFieldValue;
    import com.htu.fizio.jsf.faces.FacesUtil;

...

@PostConstruct
public void init() {
    if (FacesUtil.containsKey("assessmentId")) {
        final Long id = Long.parseLong(FacesUtil.get("assessmentId"));

        assessment = assessmentManager.find(id);
    } else {
        assessment = new Assessment();
    }
}

    public String doAddField() {
        final AssessmentFieldValue value = new AssessmentFieldValue();

        value.setField(assessmentField);
        value.setValue("");

        assessment.getFieldValues().add(value);

        assessmentManager.save(assessment);

        return "/edit/assessment";
    }

编辑:

刚在调试时注意到这一点,是否可能会怀疑?:

Daemon Thread [HandshakeCompletedNotify-Thread] (Suspended (exception ConcurrentModificationException)) 
    HashMap$EntryIterator(HashMap$HashIterator<E>).nextEntry() line: 793    
    HashMap$EntryIterator.next() line: 834  
    HashMap$EntryIterator.next() line: 832  
    SSLSocketImpl$NotifyHandshakeThread.run() line: 2214

问题答案:

我认为我已经解决了这个问题,至少我已经解决了下一个错误!

尽管发布了大量代码,但我没有发布完整的xhtml,其中有多个嵌套的表单标签。只是一种形式似乎允许传递assessmentId参数,这又允许AssessmentBean然后为评估类型正确填充AssessmentFields列表。

感谢您的所有帮助。



 类似资料:
  • 问题内容: 我在PRG模式下使用JSF。(在我的导航规则中使用)。 问题是,当我收到验证错误(例如:用户未设置强制值)时,重定向未完成(即,帖子后跟随同一页面)。 该方案是: 用户未输入强制值并提交表单 发生验证错误,并且显示同一视图并显示一条错误消息(无PRG) 用户设置强制值并提交==> GO到下一页(带有PRG) 用户单击后退按钮=>问题,因为在步骤2中未执行PRG。==>在Firefox中

  • 我正在使用带有PRG模式的JSF。(在我的导航规则中使用)。 问题是,当我收到验证错误(例如:用户未设置强制值)时,重定向没有完成(即,一篇文章后面跟着同一页的get)。 情况是: > 用户没有输入强制值并提交表单 发生验证错误,同一视图显示错误消息(无PRG) 用户设置强制值并提交== 用户点击后退按钮= 谁能帮帮我吗? 提前感谢。 斯特凡

  • 问题内容: 非常奇怪的错误。我使用的是http://developers.facebook.com/docs/authentication/。所以我创建了对fb的请求并传递redirect_uri。我在本地主机上使用测试站点。所以如果我通过 redirect_uri = http://localhost/test_blog/index.php 它工作正常,但如果我通过 redirect_uri =

  • 因此,很明显,它识别出输入的名称太短,但我在视图中没有得到任何错误消息,正如这里所预期的:。

  • 主要内容:标签属性,JSF验证整数范围实例标签用于验证一个浮点()值的范围。 以下代码显示如何使用标记 标签属性 属性 说明 minimum 在可选范围内最小长度值 maximum 在可选范围内最大长度值 JSF验证整数范围实例 打开 NetBeans IDE 创建一个Web工程:ValidateDoubleValueRange,其目录结构如下所示 - 创建以下文件代码,文件:index.xhtml 的代码内容如下所示 - 文件:resu

  • 使用在WebSphere 8.5.5中运行的PrimeFaces 5.3 我有一个带有两个必填字段的表单,一个和一个。我在菜单中选择一个有效值(例如无状态),但将文本字段留空,导致错误。然后我更正文本字段,但用户也按下菜单上的“S”键——打算再次选择“无状态”,但结果是“选择国家”,这意味着没有选择任何内容——另一个验证错误。 当用户按下ENTER时,他们会收到另一条的错误消息,该字段本身被突出显