我必须编写一个显示登录表单的复合组件,并且可以与以下代码段一起使用:
<login:loginForm username="#{loginBean.username}"
password="#{loginBean.password}"
action="#{loginBean.login}"/>
我的loginBean只是一个简单的可序列化@ViewScoped
@ManagedBean
,包含getter,setter和public String login()
方法。
这是我的复合组件:
<body>
<cc:interface>
<cc:attribute name="username" required="true" type="java.lang.String" />
<cc:attribute name="password" required="true" type="java.lang.String" />
<cc:attribute name="action" targets="submit" required="true" method-signature="java.lang.String f()"/>
</cc:interface>
<cc:implementation>
<h3><span xml:lang="en">Login</span> Daten </h3>
<h:form>
<div class="formblock">
<fieldset>
<div>
<h:outputLabel value="Username" for="username"/>
<h:inputText id="username" value="#{cc.attrs.username}"/>
</div>
<div>
<h:outputLabel value="Passwort" for="password"/>
<h:inputSecret id="password" value="#{cc.attrs.password}"/>
</div>
</fieldset>
</div>
<div class="buttons">
<h:commandButton id="submit" value="Anmelden" accesskey="r" />
</div>
</h:form>
</cc:implementation>
</body>
但是,当我在浏览器中打开login.xhtml页面(其中包含login:loginForm
- 代码段)时,我可以在jetty日志中看到以下错误:
Apr 29, 2012 11:59:49 PM org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguage retargetMethodExpressions
SEVERE: Inner component submit not found when retargetMethodExpress
但这意味着什么?我的代码中的错误在哪里?我已经尝试了一些其他解决方案来实现action
属性,但没有成功。
答案 0 :(得分:1)
确定。在升级到myfaces版本2.1.7之后,没有target
的直接解决方案 - 工作原理:
<body>
<cc:interface>
<cc:attribute name="username" required="true" type="java.lang.String" />
<cc:attribute name="password" required="true" type="java.lang.String" />
<cc:attribute name="action" required="true" method-signature="java.lang.String f()"/>
</cc:interface>
<cc:implementation>
<h3><span xml:lang="en">Login</span> Daten </h3>
<h:form>
<div class="formblock">
<fieldset>
<div>
<h:outputLabel value="Username" for="username"/>
<h:inputText id="username" value="#{cc.attrs.username}"/>
</div>
<div>
<h:outputLabel value="Passwort" for="password"/>
<h:inputSecret id="password" value="#{cc.attrs.password}"/>
</div>
</fieldset>
</div>
<div class="buttons">
<h:commandButton action="#{cc.attrs.action}" value="Anmelden" accesskey="r" />
</div>
</h:form>
</cc:implementation>
</body>
答案 1 :(得分:0)
target =“submit”不正确,因为h:form是NamingContainer,所以你需要为该组件分配和id并将目标更改为“myForm:submit”或类似的东西。