我正在研究的Seam应用程序遇到了一些问题,我想知道是否有人知道它的方法.我的应用程序中有一个表单,它使用AJAX显示某些输入框,具体取决于下拉框中的项目.除了在输入框中设置ID之外,代码工作正常.看起来JSF不允许我通过变量设置ID.标签中的"for"等其他属性也没问题.这里有一些代码解释了我的意思:
<ui:repeat value="#{serviceHome.instance.serviceSettings}" var="currSetting" >
<li>
<!-- Imagine the below works out as "settingABC" -->
<c:set var="labelKey" value="setting#{jsfUtils.removeWhitespace(currSetting.key.name)}" />
<!-- Labelkey is correctly added into this input so for = "settingABC" -->
<h:outputLabel for="#{labelKey}" styleClass="required generated" value="#{currSetting.key.name}:"/>
<s:decorate styleClass="errorwrapper">
<!-- Labelkey ISN'T correctly added into this input. Instead we just get "setting" -->
<h:inputText id="#{labelKey}" value="#{currSetting.value}"/>
<a4j:outputPanel ajaxRendered="true">
<h:message for="#{labelKey}" styleClass="errormessage" />
</a4j:outputPanel>
</s:decorate>
</li>
</ui:repeat>
Run Code Online (Sandbox Code Playgroud)
有谁知道我怎么能超越这个?
你明白他们为什么不让你设置ID,对吧?JSF接管id创建,因为你在重复的组件循环中,如果他们让你只设置id,你最终会得到重复的ID,这对你无论如何都无济于事.
在不知道为什么要明确设置ID的情况下,很难为您提供解决方法.如果是JavaScript,你可以做Grant Wagner所建议的,让JSF给你它作为id的内容.您还可以查看生成的HTML并查看id所在的格式.JSF通常使用
"form_id:loop_id:loop_index:component_id"
Run Code Online (Sandbox Code Playgroud)
作为它为表单/重复中的组件生成的id.您必须确定并为您的表单提供id和ui:重复标记以了解它们是什么.
好的,你回答说你想在循环中为特定的inputText设置一个h:message标签,这很容易.
<h:inputText id="myInput" .... />
<h:message for="myInput" ... />
Run Code Online (Sandbox Code Playgroud)
现在,为输入生成的消息将显示在消息中,并且JSF将破坏"for"属性(尽管这不是生成HTML),就像它将与inputText中的"id"属性匹配一样.
您甚至可以在处理程序代码中生成OWN消息以转到特定的h:消息,但是在给定支持bean(不是值支持bean)的情况下,您需要使用对clientId的调用来获取消息的目标.有问题的组件.
归档时间: |
|
查看次数: |
21549 次 |
最近记录: |