jqGrid无法使用@Transactional加载

时间:2013-11-20 18:02:33

标签: java spring jqgrid struts2 mybatis

当我在上限业务方法中添加注释@Transactional时,jqGrid不会加载数据。但是少注释工作正常,为什么?

@Service
@Scope("request")
public class MarcacionServiceImp implements MarcacionService{

@Autowired
MarcacionMapper mapper;

@Transactional  
public List<Marcacion> lista() throws Exception {
    List<Marcacion> lista = mapper.listado();
    return lista;
}

 }

<action name="cargarMarcacion" class="cargaMarcacionAction">
        <result type="json" />
</action>


<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="configLocation" value="/WEB-INF/mybatis-config.xml" />
</bean>

<bean id="dataSource" 
       class="org.springframework.jdbc.datasource.DriverManagerDataSource"
    p:driverClassName="com.mysql.jdbc.Driver" p:url="jdbc:mysql://localhost/asistencia"
    p:username="root" p:password="root" />

<bean id="transactionManager"     
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
  p:dataSource-ref="dataSource" />

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="mapper" />
    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
</bean>

<bean id="usuarioAction" class="action.UsuarioAction" >
    <property name="service" ref="usuarioService" />    
</bean>  
<bean id="usuarioService" class="negocio.UsuarioServiceImp" />

<bean id="cargaMarcacionAction" class="action.CargaMarcacionAction">
    <property name="service" ref="marcacionService" />
</bean> 
<bean id="marcacionService" class="negocio.MarcacionServiceImp" />

我的页面中没有获取JSON数据。我正在使用Struts2-Spring和MyBatis-Spring。 我的意思是问题是@Transactional没有返回我的JSON数据。

1 个答案:

答案 0 :(得分:2)

当struts2默认返回"json"结果时,它被配置为序列化动作实例本身。但我认为jqGrid不需要它,它只需要相关数据。您可以使用"json"结果的参数来缩小序列化所需的属性。首先,您应该通过重命名返回序列化数据的方法来定义属性getter。

@Transactional  
public List<Marcacion> getLista() throws Exception {
    List<Marcacion> lista = mapper.listado();
    return lista;
}

其次,将"root"参数添加到结果

<result type="json">
  <param name="root">lista</param>
</result>

@Transactional与JSON数据序列化无关,但是如果从数据库中检索数据则需要它。