我在dataTable中有一个commandLink。 dataTable由ajax调用填充。但是我的commandLink没有指向正确的位置。这是代码。
<h:form id="form1">
<h:outputLabel value="Search Movie: " /> <h:inputText value="#{movieBean.movie.name}" id="inputName">
<f:ajax render="dTbl" listener="#{movieBean.searchMovie}" execute="inputName" />
</h:inputText><br/>
<h:commandButton type="reset" value="Clear" />
<h:dataTable id="dTbl" value="#{movieBean.movies}" var="movies" rendered="#">
<h:column>
<f:facet name="header">
<h:outputText value="Name" />
</f:facet>
<h:commandLink action="#{movieBean.loadMovieDetails}">
<h:outputText value="#{movies.name}" />
</h:commandLink>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="ISBN" />
</f:facet>
<h:outputText value="#{movies.isbn}"></h:outputText>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Release Date" />
</f:facet>
<h:outputText value="#{movies.releaseDate}"></h:outputText>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Star Rating" />
</f:facet>
<h:outputText value="#{movies.starRating}"></h:outputText>
</h:column>
</h:dataTable>
</h:form>
非常感谢任何帮助。 谢谢 伊马德
答案 0 :(得分:1)
将bean放在视图范围内。
@ManagedBean
@ViewScoped
public class MovieBean {
// ...
}
确保您在getter中没有做任何业务逻辑。所以它们应该都是这样的
public List<Movie> getMovies() {
return movies;
}
是的,只是return propertyName;
而已。如果您需要,请在其他地方执行此操作。
两者都将确保在表单提交请求期间电影列表与显示列表的请求期间完全相同。这样,JSF可以找到负责该操作的commandlink并相应地执行它。