【问题标题】:Select a component and display - Ajax选择一个组件并显示 - Ajax
【发布时间】:2011-08-07 09:09:43
【问题描述】:

我需要输出在selectOneMenu-list 中选择的文本。我的代码如下;

<h:selectOneMenu value="#{DataForm.stationed}" id="globalFilter" onchange="carsTable.filter()" style="width:350px;font-size:13px;"  >
    <f:selectItems value="#{DataForm.listHotel}" var="user" itemValue="#{user[1]}" itemDisabled="false" itemLabel="#{user[1]}" />
    <h:outputText value="#{carsTable[1]}" style="width:350px"/>
</h:selectOneMenu>

如何编码?

编辑

此列表框位于 &lt;datatable&gt;

<h:body>
    <h:form id="form1" >
        <p:dataTable var="car" value="#{DataForm.listHotels}" widgetVar="carsTable" paginator="true" rows="10" onRowSelectComplete="carDialog.show()" emptyMessage="No hospital found with given criteria" selectionMode="single" onRowSelectUpdate="growl" style="width:1400px;font-size:13px;">

            <h:selectOneMenu value="#{DataForm.stationed}" id="globalFilter" onchange="carsTable.filter()" style="width:350px;font-size:13px;"  >
                <f:selectItems value="#{DataForm.listHotel}" var="user" itemValue="#{user[1]}" itemDisabled="false" itemLabel="#{user[1]}" />
                <h:outputText value="#{carsTable[1]}" style="width:350px"/>
            </h:selectOneMenu>

        </p:dataTable>

        <f:ajax render= "@form1" >
            <h:selectOneMenu value="#{DataForm.stationed}">
                <f:selectItems value="#{DataForm.listHotels}" var="item" itemValue="#{DataForm.listHotels}" itemLabel="#{DataForm.listHotels}" />
            </h:selectOneMenu>
        </f:ajax>
    </h:form>
</h:body>

【问题讨论】:

    标签: ajax jsf primefaces


    【解决方案1】:

    我认为您应该首先删除嵌套的&lt;h:outputText/&gt;,它在那个位置实际上没有意义。此外,从您的问题和示例代码来看,PrimeFaces 与它有什么关系并不清楚。

    要输出选定的值,只需打印表达式#{DataForm.stationed},因为这是接收选定值的绑定。

    以下示例通过 AJAX 演示了这一点,但如果您使用操作和常规表单提交,它的工作方式相同。

    小脸

    <html xmlns="http://www.w3.org/1999/xhtml"
        xmlns:h="http://java.sun.com/jsf/html"
        xmlns:f="http://java.sun.com/jsf/core">
        <h:head />
    
        <h:body>
    
            <h:form id="form">
    
                <f:ajax render="form">
                    <h:selectOneMenu value="#{selectOneMenuBean.value}">
                        <f:selectItems value="#{selectOneMenuBean.items}" var="item" itemValue="#{item}" itemLabel="#{item}" />
                    </h:selectOneMenu>
                </f:ajax>
    
                Selected value: #{selectOneMenuBean.value}
    
            </h:form>
    
        </h:body>
    </html>
    

    豆子

    @ViewScoped
    @ManagedBean
    public class SelectOneMenuBean {
    
        private List<String> items = Arrays.asList("a", "b", "c");
        private String value;
    
        public List<String> getItems() {
            return items;
        }
    
        public String getValue() {
            return value;
        }
    
        public void setValue(String value) {
            this.value = value;
        }
    
    }
    

    附言 在您的代码示例中,bean 的 EL 名称以大写字母开头。这有点违反典型的约定。此外,您可能需要注意您的姓名和类型。 bean 返回一个名为listHotel 的东西,但它被分配给一个名为user 的变量,然后由一个整数索引。我建议对齐名称(例如集合名称 = users,变量名称 user)并使用属性而不是索引(例如 user.name)。

    【讨论】:

    • 你好,我得到了这个异常,有什么线索吗? SEVERE: Error Rendering View[/test.xhtml] javax.faces.FacesException: &lt;f:ajax&gt; contains an unknown id 'form' - cannot locate it in the context of the component j_idt15
    • 您需要为表单提供 ID form 以便通过 ID 引用它。在示例中,它是一个简单的 ID,这意味着它必须可以从 ajax 标记访问。尝试给出的示例,并根据您的情况仔细修改它,直到它中断。或者,您可以在 ajax 标记上使用 render="@form"。这将定位您的组件嵌套的表单,而无需担心名称。
    • 我稍微编辑了我的问题,为问题添加了更多信息。即使添加了render="@form",我仍然会遇到同样的异常
    • 我有点不清楚你现在在做什么。您编辑的问题的示例代码中没有任何 &lt;f:ajax&gt; 标记,所以我无能为力。我现在只能说我给出的例子是有效的。尝试一下,说服自己它有效,然后慢慢地从有效的示例代码到您自己的代码。
    • 附注@form1 在您的代码中没有意义。它不是指一个ID。它是@form(意思是'父窗体')或form1(意思是'ID 为'form1'的组件)
    猜你喜欢
    • 2015-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 2011-01-17
    • 1970-01-01
    • 2017-01-16
    相关资源
    最近更新 更多