JSF2表单提交“Target Unreachable,标识符'myModel'仅在提交时解析为null

时间:2012-11-07 16:16:33

标签: jsf-2 jboss7.x cdi

我有一个非常奇怪的问题,一个bean没有解决,但只提交。它在视图上工作正常但在提交时,它错误地说标识符为空

我的JSF

    <h:form id="edit" styleClass="form">
        <rich:panel>
            <f:facet name="header">
                <h:outputText value="Edit Data" />
            </f:facet>

            <rich:graphValidator value="#{myModel}" id="gv">
                <rich:messages for="gv" />
                <rich:messages id="goal-messages" globalOnly="true" />

                    <!-- form fields that reference #{myModel.fields} -->

                    <h:commandButton id="save" value="Save"
                        action="#{myModel.save}" />
            </rich:graphValidator>

        </rich:panel>
    </h:form>

Model类

@Named("myModel")
@RequestScoped
public class MyModelImpl implements Model {

    @Inject
    @RequestParam("objectId")
    private Long objectId;


    // Getters & Setters for the various fields


    public void save() {
        // does nothing just now
    }
}

我知道我应该将保存操作移动到控制器中,一旦我使用它,我就会这样做。我有另一个这样的实例没有问题(在另一个但相关的模块中)。实际上,我根据需要复制了代码并开始修改。

这个模块的主要区别在于我的名字与班级不同。

视图加载确定没有任何问题,但在提交时,我得到以下内容:

根异常是:

Caused by: javax.el.PropertyNotFoundException: /edit.xhtml @26,71 value="#{myModel.name}": Target Unreachable, identifier 'myModel' resolved to null
at com.sun.faces.facelets.el.TagValueExpression.setValue(TagValueExpression.java:133) [jsf-impl-2.1.7-jbossorg-2.jar:]
at org.richfaces.el.ValueExpressionAnalayserImpl$SetValueCommand.resolve(ValueExpressionAnalayserImpl.java:42) [richfaces-components-ui-4.2.2.Final.jar:4.2.2.Final]
at org.richfaces.el.ValueExpressionAnalayserImpl.resolveValue(ValueExpressionAnalayserImpl.java:64) [richfaces-components-ui-4.2.2.Final.jar:4.2.2.Final]
at org.richfaces.el.ValueExpressionAnalayserImpl.updateValueAndGetPropertyDescriptor(ValueExpressionAnalayserImpl.java:90) [richfaces-components-ui-4.2.2.Final.jar:4.2.2.Final]
at org.richfaces.validator.BeanValidatorServiceImpl.validateExpression(BeanValidatorServiceImpl.java:157) [richfaces-components-ui-4.2.2.Final.jar:4.2.2.Final]
... 41 more

请记住,它可以查看页面,我真的不知道为什么它不能用于提交。

我尝试过各种各样的事情,包括:

  • 将范围更改为@ViewScoped,
  • 删除显示的大部分字段(第一栏 - 名称),
  • 再次传递requestParam(但我意识到我一开始并没有拿到它而且工作正常。

我发现很多不同的人有相同的最终错误,但环境不一样。

一切都没有快乐。有人对这个问题有什么想法吗?

我正在JBoss 7.1.1.Final上使用Arquillian进行测试

任何帮助表示感谢。

3 个答案:

答案 0 :(得分:2)

事实证明 - 罪魁祸首是日食。在昨天浪费了整整一个下午后,我尝试在今天早上通过maven运行测试,并且工作正常。

我曾尝试在日食中清理这些项目但昨天似乎没有任何效果。今天再做一次似乎可以解决这个问题。

事实上,问题又出现了,我再次通过清理项目来解决这个问题。

: - /

答案 1 :(得分:0)

可以尝试@ManagedBean?:

@ManagedBean(name="myModel")
@RequestScoped
public class MyModelImpl implements Model {

@Inject
@RequestParam("objectId")
private Long objectId;


// Getters & Setters for the various fields


//should save return some outcome?
public String save() {
    return "index.xhtml";
}

public String getName() {
   retrun "Your error shows that somewhere in your xhtml this property is called";
}
}

答案 2 :(得分:0)

检查faces-config.xml是否位于Web应用程序根目录的META-INF目录中。

http://docs.oracle.com/javaee/7/api/javax/faces/webapp/FacesServlet.html