【问题标题】:Why does my s:selectItems throws no such element exception?为什么我的 s:selectItems 没有抛出这样的元素异常?
【发布时间】:2011-10-17 06:31:18
【问题描述】:

当我在提交表单时尝试检查h:selectManycheckBox 下的复选框之一时,出现此错误java.util.NoSuchElementException。

许多复选框是从 bean 动态填充的。这是我的代码。

<h:form id="eF">
       <h:inputText id="i" value="#{aklat.suggest}">
            <a4j:support event="onkeyup" action="#{aklat.complete}" reRender="m"></a4j:support>
       </h:inputText>

       <s:div>
           <h:selectManyCheckbox value="#{aklat.selectedBooks}" layout="pageDirection" id="m">
                <s:selectItems value="#{aklat.books}" var="_book" itemLabel="#{_book}" itemValue="#{_book}" label="#{_book.bookName}"/>
           </h:selectManyCheckbox>
         <a4j:commandButton value="Add Users" action="#{aklat.fire}"></a4j:commandButton>  
       </s:div>             
</h:form>

奇怪的部分是它呈现了一些数据输出,但是当我检查源代码时。没有输入类型复选框元素。

是我缺少的东西。

【问题讨论】:

    标签: jsf-2 richfaces


    【解决方案1】:

    我假设您的托管 bean 是请求范围...

    因为您正在发出 ajax 请求,所以您必须启用“aklat.books”以使其值比请求更长但比会话范围更短。

    如果你的应用程序库之间有 tomahawk,你可以像这样使用 savestate(把它放在 h:form 标签之后):

    <t:saveState value="#{aklat.books}"/>
    

    如果没有战斧,可以使用 a4j:keepAlive:

    <a4j:keepAlive beanName = "#{aklat.books}"/>
    

    【讨论】:

    • 感谢您的回复。是的,绝对我的 bean 仅在请求范围内。我会努力解决你的问题。 :))
    • 顺便说一句,“比会话范围短”是什么意思?如果我将我的 bean 声明为会话范围,我会得到同样的错误吗? .:)
    • 在会话范围内,数据将在请求之间可用(除非您有意删除它)。成功了吗?
    • 是的,它现在可以工作了。但是 beanName 必须是字面的,所以我将其更改为 beanName="aklat"...非常感谢 - 干杯 :))
    猜你喜欢
    • 2011-12-12
    • 2010-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多