我有一个包含一些字段的表格。问题是按下保存按钮时播放器和系列类型设置为空。选择菜单项在使用时设置正确。只有当您按下按钮时,它们才会设置为 null。
<p:dataTable id="scores" var="aScore" value="#{serviceScoreDB.scoresList }"
border="1">
<p:column id="playerName">
<f:facet name="header">Namn</f:facet>
<p:commandLink value="#{aScore.playerName}">
</p:commandLink>
</p:column>
<p:column id="player">
<f:facet name="header">Spelare</f:facet>
Spelare
<p:selectOneMenu value="#{player}"
converter="playerConverter" id="playerList">
<f:selectItem itemLabel="---" noSelectionOption="true" />
<f:selectItems value="#{servicePlayer.allPlayers}"
var="n"
itemValue="#{n}"
itemLabel="#{n.combinedName}"
itemLabelEscaped="true"/>
<p:ajax event="change" execute="@this" listener="#{serviceHCP.getClubs(player) }" update="test"
render="test" />
</p:selectOneMenu>
</p:column>
<p:column id="club">
<f:facet name="header">Klubb</f:facet>
<h:outputText id="test" value="#{serviceHCP.myCurrentClub.name}"></h:outputText>
</p:column>
<p:column id="serieType">
<f:facet name="header">Spelare</f:facet>
<p:selectOneMenu value="#{serviceSerieType.mySerieType}"
converter="serieTypeConverter" id="serieTypeList">
<f:selectItem itemLabel="---" noSelectionOption="true" />
<f:selectItems value="#{serviceSerieType.serieTypes}"
var="st"
itemValue="#{st}"
itemLabel="#{st.serie_type}"
itemLabelEscaped="true"/>
<p:ajax event="change" execute="@this" update="sType"/>
</p:selectOneMenu>
</p:column>
<p:column id="ssType">
<f:facet name="header">SerieType</f:facet>
<h:outputText id="sType" value="#{serviceSerieType.mySerieType}"></h:outputText>
</p:column>
<p:column id="playDate">
<f:facet name="header">Datum</f:facet>
<div class="text-input">
<h:inputText id="pDate" value="#{aScore.playDate}" style="width: 100px; border: none; background: none;" readonly="true">
<f:convertDateTime pattern="yyyy-MM-dd HH:mm:ss" />
</h:inputText>
</div>
<!-- h:outputText value="#{aScore.playDate}" >
<f:convertDateTime pattern="yyyy-MM-dd HH:mm:ss" />
</h:outputText -->
</p:column>
<p:column id="serieNo">
<f:facet name="header">Antal Serier</f:facet>
<h:inputText id="serieNumber" value="#{aScore.serieNo}" style="width: 75px; border: none; background: none;" readonly="true">
</h:inputText>
<!-- h:outputText value="#{aScore.serieNo}" / -->
</p:column>
<p:column id="laneNo">
<f:facet name="header">Bana</f:facet>
<h:outputText value="#{aScore.laneNo}" />
</p:column>
<p:column id="hcp">
<f:facet name="header">Hcp</f:facet>
<h:outputText id="testing" value="#{aScore.hcp}" />
</p:column>
<p:column id="totalScore">
<f:facet name="header">Total poäng</f:facet>
<div class="text-input">
<h:inputText id="scoreID" value="#{aScore.totalScore}" style="width: 75px; border: none; background: none;" readonly="true"></h:inputText>
</div>
<!-- h:outputText value="#{aScore.totalScore}" / -->
</p:column>
<p:column id="save">
<f:facet name="header">Spara</f:facet>
<p:commandButton value="Visa lista" action="#{serviceScoreDB.saveScores(player, serviceHCP.myCurrentClub,
serviceSerieType.mySerieType, aScore.playDate, aScore.totalScore, aScore.serieNo)}">
</p:commandButton>
</p:column>
</p:dataTable>
命令按钮正在执行并提交表单中所有值的值。
如果表单提交中的任何表单字段验证失败,则不会提交任何值。 这可能就是为什么player
和serieType
在参数中作为 null 传递给操作方法的原因。 Action 方法将在所有验证和表单提交发生后在调用应用程序阶段运行。
我的建议是尝试为 commandButton 指定一个 p:ajax
标记,以便仅处理和呈现您想要的字段。 这可能会解决您的问题,但这是我从您发布的代码中所能看出的全部内容。