0

我找不到任何资源可以回答我为什么会遇到此错误:

oncomplete="#{MyBacking.oError ? #{rich:component('oErrorPanel')}.show() : return false;}"

在富豪a4j:commandButton中。oError 指的是我的 bean 中称为 isOError 的方法。

我收到错误

SEVERE: Servlet.service() for servlet Faces Servlet threw exception
org.apache.el.parser.ParseException: Encountered " "?" "? "" at line 1, column 30.
Was expecting one of:
    "}" ...
    "." ...
...

我想说'如果一个方法返回 true,则显示模态面板 A,否则为 false'。非常感谢任何帮助。

编辑 我已经编辑了代码,所以它看起来如下:

                        <a4j:region id="Cont">
                        <a4j:form name="Form">
                            <h:panelGrid columns="2" style="padding: 2px;">

                                <h:outputText value="Old password&#160;" />
                                <h:inputSecret id="FormOldP" value="#{MyBacking.dbOldPwd}" />

                                <h:outputText value="New password&#160;" />
                                <h:inputSecret id="FormNewP0" value="#{MyBacking.dbNewPwd0}" />

                                <h:outputText value="Re-enter new password&#160;" />
                                <h:inputSecret id="FormNewP1" value="#{MyBacking.dbNewPwd1}" />

                                <h:panelGroup>
                                    <a4j:commandButton value="Submit"
                                        action="#{MyBacking.dbPwdChange}"
                                        data="#{MyBacking.oldDbPwdError}"
                                        oncomplete="if(data == true) { rich:component('OldErrorPanel').show(); }"
                                        image="/img/btnSubmit16.png"
                                        reRender="sysMsg,FormCont" />

                                    <a4j:commandButton value="Cancel"
                                        onclick="#{rich:component('MyPanel')}.hide();return false;" />
                                </h:panelGroup>
                            </h:panelGrid>
                        </a4j:form>
                    </a4j:region>

这编译得很好,但即使布尔值设置为 true(当旧密码不是存储的那个时)面板 MyPanel 仍保留在屏幕上,但错误模式 OldErrorPanel 不会出现。以上对我来说看起来不错。这是java:

public void setOldDbPwdError(boolean b) {
    logger.info("setting ldDbPwdErro to "+b);
    oldDbPwdError = b;
}

public boolean isOldDbPwdError() {
    logger.info("asking for isOldDbPwdError, returning" +oldDbPwdError);
    return oldDbPwdError;
}

非常感谢任何进一步的建议。

4

1 回答 1

3

你的表达无效。您正在从表达式中打开另一个表达式(#{})

如果它是有效的,它看起来像: oncomplete="#{MyBacking.oError ?rich:component('oErrorPanel').show() : ''}"

但是我认为这不能解决您的问题,因为您必须重新渲染按钮本身才能获得 oError 的值(请记住,JSF 全部渲染为页面的 HTML/Javascript)

我会像这样使用data属性commandButton

<a:commandButton
  id="Bgo"
  action="#{MyBacking.someAction}"
  value="Submit"
  data="#{MyBacking.oError}"
  oncomplete="if(data == true) { rich:component('oErrorPanel').show(); }"/>

阅读 Richfaces 手册,尤其是关于Javascript 交互的手册。

更新:响应更新的问题。尝试重新渲染您用于data页面其他位置的值以检查该值。例如:

<h:outputText id="reRenderMe" value="#{MyBacking.oError}"/>
于 2010-05-19T22:02:16.733 回答