【问题标题】:JSF2 form submit " Target Unreachable, identifier 'myModel' resolved to null ONLY on submitJSF2 表单提交“目标无法访问,标识符 'myModel' 仅在提交时解析为空
【发布时间】:2012-10-27 17:53:56
【问题描述】:

我有一个非常奇怪的问题,一个 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>

模型类

@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 进行测试

任何帮助表示赞赏。

【问题讨论】:

标签: jsf-2 jboss7.x cdi


【解决方案1】:

事实证明,罪魁祸首是日食。昨天浪费了一个下午,今天早上我尝试通过 maven 运行测试,它运行良好。

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

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

:-/

【讨论】:

    【解决方案2】:

    可以试试@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";
    }
    }
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-05-09
        • 2012-10-17
        • 2017-07-02
        • 2012-05-10
        • 1970-01-01
        • 2023-04-06
        • 2013-09-26
        • 1970-01-01
        相关资源
        最近更新 更多