O problema do request scope é que se a pessoa selecionar um item na tela, você deve saber qual ela selecionou correto? Aí geralmente utilizamos o view ou o session scope pois ele já tem esse objeto guardadinho pra gente. É só trabalhar com esse cara para ser feliz.
Para utilizar como request, o dataTable teria que guardar toda informação necessário para que o objeto selecionado seja identificado, geralmente o ID.
Olha soh um exemplo bobo abaixo:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets">
<h:head>
<h:outputStylesheet library="css" name="main.css" />
</h:head>
<h:body>
<h:form>
<h3>#{msgs.loginHello}: #{userMB.user.name} || <h:commandLink action="#{userMB.logOut()}" value="#{msgs.logout}" /> </h3>
<h:messages />
<h:dataTable value="#{dogMB.allDogs}" var="dog" styleClass="table" headerClass="tableColumnsHeader" rowClasses="tableFirstLine,tableNextLine" >
<h:column>
<f:facet name="header">
#{msgs.dogName}
</f:facet>
#{dog.name}
</h:column>
<h:column>
<f:facet name="header">
#{msgs.dogWeight}
</f:facet>
#{dog.weight}
</h:column>
<h:column>
<h:panelGrid columns="2">
<!-- Always save the id as hidden when you use a request scope MB -->
<h:inputHidden value="#{dog.id}" />
<h:commandButton action="#{dogMB.updateDogStart()}" value="#{msgs.update}" rendered="#{userMB.userAdmin}" >
<f:setPropertyActionListener target="#{dogMB.dog}" value="#{dog}" />
</h:commandButton>
<h:commandButton action="#{dogMB.deleteDogStart()}" value="#{msgs.delete}" rendered="#{userMB.userAdmin}" >
<f:setPropertyActionListener target="#{dogMB.dog}" value="#{dog}" />
</h:commandButton>
</h:panelGrid>
</h:column>
</h:dataTable>
<!-- This button is displayed to the user, just to you see the error msg -->
<h:commandButton action="createDog" value="#{msgs.create} #{msgs.dog}" />
</h:form>
</h:body>
</html>
Para enviar esse objeto como selecionado no caso do update/delete/detail ele precisar ir com o ID para nossa aplicar poder trabalhar com ele de modo correto.
Para isso o id foi colocado como hidden:
Desse modo aí, seria possível possível ter um datatable lazy com requestScope MB. Eu tirei esse exemplo daqui: http://uaihebert.com/?p=836&page=9 Mas não está utilizando datatable lazy, não era a intenção do post. Mas pode ser utilizado para tal fim. [=