h:commandButton 无法向支持 bean 提交参数

发布于 2024-09-24 01:56:18 字数 712 浏览 5 评论 0原文

我想向我的支持 bean 提交一个键值,以便我知道集合中的哪个用户正在尝试更新。我想我需要使用 f:param 来做到这一点,但不知何故它不起作用。如果我使用 af:commandButton 而不是 h:commandButton,它将很好地提交值。

这是我的按钮:

<h:commandButton styleClass="cntctmBtn" value="Update" action="#{pullForm.updateDependent}">
   <f:param name="selectedIndex" value="#{loop.index}" />
   <f:param name="selectedEDI" value="#{eachOne.identifier.dodEdiPnId}" />
</h:commandButton>

这是我尝试获取提交的值的方法。

FacesContext context = FacesContext.getCurrentInstance();
Map map = context.getExternalContext().getRequestParameterMap();
String edi_tmp = (String)map.get("selectedEDI");

但我得到了 ArrayIndexOutOfBound 异常,请帮忙,谢谢。

I would like to submit a key value to my backing bean so that I know which person within a collection user trying to update. I think I need to used f:param to do so, but somehow it does not work. It will submit the value just fine if I use af:commandButton instead of h:commandButton.

Here is my button:

<h:commandButton styleClass="cntctmBtn" value="Update" action="#{pullForm.updateDependent}">
   <f:param name="selectedIndex" value="#{loop.index}" />
   <f:param name="selectedEDI" value="#{eachOne.identifier.dodEdiPnId}" />
</h:commandButton>

and here is how I am trying to get my submitted values out.

FacesContext context = FacesContext.getCurrentInstance();
Map map = context.getExternalContext().getRequestParameterMap();
String edi_tmp = (String)map.get("selectedEDI");

But I got the ArrayIndexOutOfBound Exception, please help, thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

东风软 2024-10-01 01:56:18

如果按钮位于 或任何其他 UIData 组件,那么您应该通过 UIData#g​​etRowData()DataModel#getRowData()< /代码>。无需将行标识符作为参数等传递。

例如

@ManagedBean
@ViewScoped
public class Bean {
    private List<Person> persons;
    private DataModel<Person> personModel;

    public Bean() {
        persons = loadItSomehow();
        personModel = new ListDataModel<Person>(persons);
    }

    public void update() {
        Person selectedPerson = personModel.getRowData(); // There it is.
        // ...
    }

    // Add/generate getters/setters/etc.
}

保持

<h:form>
    <h:dataTable value="#{bean.personModel}" var="person">
        <h:column>
            <h:commandButton value="update" action="#{bean.update}" />
        </h:column>
    </h:dataTable>
</h:form>

简单。

另请参阅:

If the button is inside a <h:dataTable> or any other UIData component, then you should be retrieving the "current" row object by UIData#getRowData() or DataModel#getRowData(). No need to pass the row identifier around as parameter or so.

E.g.

@ManagedBean
@ViewScoped
public class Bean {
    private List<Person> persons;
    private DataModel<Person> personModel;

    public Bean() {
        persons = loadItSomehow();
        personModel = new ListDataModel<Person>(persons);
    }

    public void update() {
        Person selectedPerson = personModel.getRowData(); // There it is.
        // ...
    }

    // Add/generate getters/setters/etc.
}

with

<h:form>
    <h:dataTable value="#{bean.personModel}" var="person">
        <h:column>
            <h:commandButton value="update" action="#{bean.update}" />
        </h:column>
    </h:dataTable>
</h:form>

Keep it simple.

See also:

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文