0

在 JSF 1.1 中,我在传递值时遇到了很多麻烦。我将值从 bean 传递到 JSF 页面,但它们没有被传回,导致 NullPointerException。bean 中的 declareFinishList 由要在页面上显示的初始化方法填充,但是当我提交时,我得到一个空指针异常,for (DeclareFinish df : declareFinishList)表明它没有被传回。该地图declaredFinishMap也显示为空。我以前做过这个,所以我不明白为什么这个特定的表有问题,而我的其他类似表工作正常。

编辑:我已经设法declareFinishList通过将它放在会话范围内,但我似乎仍然无法通过declaredFinishMap.

需要注意的是,bean 是由 faces-config.xml 中的 rsaleController 定义的。整个页面都包含在我没有包含的 h:form 中。

豆:

public class RetailSaleController extends BaseBean {
    private List<DeclareFinish>     declareFinishList;
    private Map<DeclareFinish, Boolean> declaredFinishMap = new LinkedHashMap<DeclareFinish, Boolean>();

    public void saveDeclareFinishList(ActionEvent event) {
    List<DeclareFinish> list = new ArrayList<DeclareFinish>();
        for (DeclareFinish df : declareFinishList) {
            if(declaredFinishMap.get(df)) {
                list.add(df);
            }
        }   
    }
}

页:

<h:panelGroup id="declareFinishListPanel">
    <rich:dataTable id="declareFinishItemTable" border="1"
        value="#{rsaleController.declareFinishList}" var="item"
        <rich:column width="16">
            <f:facet name="header">
                <rich:spacer height="24px;" />
            </f:facet>
            <h:outputText value="#{rowNo+1}" />
        </rich:column>

        <rich:column style="text-align:center;">
            <f:facet name="header">
                <h:outputText value="Locked" />
            </f:facet>
            <h:selectBooleanCheckbox id="reset"
                value="#{rsaleController.declaredFinishMap[item]}" />
        </rich:column>

        <rich:column sortBy="#{item.dealerId}" sortIcon="none;" width="110">
            <f:facet name="header">
                <h:outputText value="#{labels.crmsFldLabDealer}" />
            </f:facet>
            <h:outputText value="#{item.dealerId}" />
        </rich:column>

    </rich:dataTable>
</h:panelGroup>

<a4j:commandLink reRender="declareFinishItemTable"
    actionListener="#{rsaleController.saveDeclareFinishList}">
    <h:graphicImage value="/images/save.gif" title="Save changes"
        style="height:16;width:16;border-style:none;vertical-align:middle" />
</a4j:commandLink>
4

1 回答 1

1

只看代码片段,declareFinishList并没有在任何地方初始化,除非在代码的其他地方。

于 2013-08-14T04:13:50.380 回答