spring - 具有相同标识符值的不同对象已与带有 SpringBoot 的会话相关联
问题描述
我的代码有问题,我看过各种类似问题的帖子,但我无法解决我的问题。
我正在用一个小工厂开发一个 Erp,接下来是我的对象模型:
- 文章
- ArticuloCompras 扩展了 Articulo
- ArticuloProduccion 扩展了 Articulo
我的模型代码是下一个:对于 Articulo:
@Entity(name="articulos")
@Inheritance(strategy=InheritanceType.JOINED)
public class Articulo {
/*@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;*/
@Id
@Column(unique = true, nullable = false)
private String codigo;
private String descripcion;
@Enumerated(EnumType.STRING)
private TipoArticulo tipo;
private boolean ignorarMrp;
private String plano;
private String dTecnicos;
对于 ArticuloCOMpra:
@Entity(name="articulos_compra")
@PrimaryKeyJoinColumn(name="codigo")
public class ArticuloCompras extends Articulo {
private boolean granel;
private String dCompra;
@ManyToOne//(optional = false, cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name="proveedor_actual_id")
private Proveedor proveedorActual;
对于 ArticuloProduccion:
@Entity(name="articulos_produccion")
@PrimaryKeyJoinColumn(name="codigo")
public class ArticuloProduccion extends Articulo {
private boolean premontaje;
//@OneToOne
@Transient
private Ruta ruta;
/*@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(
name="articulo_estructura",
//joinColumns=@JoinColumn(name="articulo_codigo", referencedColumnName="codigo"),
inverseJoinColumns= {
@JoinColumn(name="articulo_utilizado", referencedColumnName="articuloUtilizado"),
@JoinColumn(name="fecha_inicio", referencedColumnName="fechaInicio"),
@JoinColumn(name="fecha_fin", referencedColumnName="fechaFin"),
@JoinColumn(name="cantidad", referencedColumnName="cantidad"),
@JoinColumn(name="tipo_unidad", referencedColumnName="unidad")}
)*/
@Transient
private List<Utilizado> estructura;
我的视图代码是下一个:
form th:action="@{/articulos/guardar}" th:object="${articulo}" class="form" method="post">
<div class="col alert alert-danger" th:if="${#fields.hasErrors('*')}" role="alert">
<p>Se han encontrado los siguientes errores al enviar el formulario:</p>
<ul>
<li th:each="err : ${#fields.errors('*')}" th:text="${err}" />
</ul>
</div>
<h6 class="ml-3">Articulo</h6>
<div class="form-art-container">
<div class="form-group input-group">
<div class="input-group-prepend">
<label for="codigo" class="input-group-text">Codigo</label>
</div>
<input type="text" class="form-control" name="codigo" placeholder="codigo" id="codigo">
</div>
<div class="form-group">
<label for="denominacion">Denominacion</label>
<input type="text" class="form-control" name="descripcion" placeholder="denominacion" id="denominacion">
</div>
<div class="form-group">
<label for="tipo_articulo">Tipo de articulo</label>
<select class="form-control" name="tipo" id="tipo_articulo" >
<option value="COMPRAS">COMPRAS</option>
<option value="PRODUCCION">PRODUCCION</option>
<option value="ACABADO">ACABADO</option>
<option value="COMERCIALIZACION">COMERCIALIZACION</option>
</select>
</div>
<div class="form-check form-check-inline">
<label class="form-check-label">
<input type="checkbox" name="granel" id="" class="form-check-input">Granel
</label>
</div>
<div class="form-check form-check-inline">
<label class="form-check-label">
<input type="checkbox" name="premontaje" id="" class="form-check-input">Premontaje
</label>
</div>
<div class="form-check form-check-inline">
<label class="form-check-label">
<input type="checkbox" name="ignorarMrp" id="" class="form-check-input">Ignorar en MRP
</label>
</div>
</div>
<h6 class="ml-3">Opciones de Compras</h6>
<div class="form-art-container">
<div class="form-group">
<label for="proveedor">Proveedor</label>
<input type="text" class="form-control" name="proveedor" placeholder="proveedor" id="proveedor">
</div>
<div class="form-group input-group">
<div class="input-group-prepend">
<label for="referencia_proveedor" class="input-group-text">Referencia Proveedor:</label>
</div>
<input type="text" class="form-control" name="referencia_proveedor" placeholder="referencia_proveedor" id="referencia_proveedor">
</div>
<div class="form-group">
<label for="datos_compras">Datos Compras</label>
<input type="text" class="form-control" name="dCompra" placeholder="datos_compras" id="datos_compras">
</div>
</div>
<h6 class="ml-3">Opciones Tecnica</h6>
<div class="form-art-container">
<div class="form-group">
<label for="plano">Plano</label>
<div class="input-group">
<input type="text" class="form-control" name="plano" placeholder="plano" id="plano">
<div class="input-group-append">
<button class="btn btn-primary">Seleccionar</button>
</div>
</div>
</div>
<div class="form-group">
<label for="datos_tecnicos">Datos Tecnicos</label>
<input type="text" class="form-control" name="dTecnicos" placeholder="datos_tecnicos" id="datos_tecnicos">
</div>
</div>
<h6 class="ml-3">Opciones de Comercializacion</h6>
<div class="form-art-container">
<div class="form-group">
<label for="datos_comercial">Datos Comercial</label>
<input type="text" class="form-control" name="d_comerciales" placeholder="datos_comercial" id="datos_comercial">
</div>
</div>
<hr>
<button class="btn btn-primary" type="submit">Enviar</button>
<button class="btn btn-primary">Cancelar</button>
</form>
我的控制器代码是下一个:
@PostMapping("/guardar")
public String guardarArticulo(@RequestParam(value="granel", required = false) boolean granel, @RequestParam(value="premontaje", required = false) boolean premontaje,
@RequestParam(value="ignorarMrp", required = false) boolean ignorarMrp, @RequestParam(value="proveedor", required = false) String proveedor,
@RequestParam(value="dCompra", required = false) String dCompra, @RequestParam(value="dComercializacion", required = false) String dComercializacion,
Articulo articulo, BindingResult result, Model model) {
if(result.hasErrors()) {
for(ObjectError error : result.getAllErrors()) {
System.out.println("Ocurrio un error: " + error.getDefaultMessage());
}
return "ArticleViews/createForm";
}
//Articulo art;
System.out.println(articulo);
switch(articulo.getTipo()) {
case COMPRAS:
ArticuloCompras art;
Optional<Proveedor> opProv; //hay que buscar el proveedor segun el id que les pase por aqui y sino añadirlo a la BBDD
Proveedor objProveedor;
opProv = this.provRepo.findByCodigo(proveedor);
if(opProv.isPresent()) {
objProveedor = opProv.get();
} else {
System.out.println("crear proveedor..");
objProveedor = new Proveedor(); //ojo aqui le paso uno vacio solo para pruevas pero habra que crearlo con su formulario si el usuario quiere.
}
art = new ArticuloCompras(articulo, granel, dCompra, objProveedor);
//this.artRepo.save(art);
this.artRepo.saveAndFlush(art);
model.addAttribute("articulo", art);
System.out.println("El siguiente articulo ha sigo persisitido:\n-------------------------------------------\n" + art);
case PRODUCCION:
ArticuloProduccion artP;
artP = new ArticuloProduccion(articulo, premontaje);
this.artRepo.saveAndFlush(artP);
model.addAttribute("articulo", artP);
System.out.println("El siguiente articulo ha sigo persisitido:\n-------------------------------------------\n" + artP);
}
return "ArticleViews/guardar";
}
我想根据用户输入表单来坚持 ArticuloCompras 和 ArticuloProduccion。当我坚持第一个对象时,应用程序可以工作,但是当我尝试坚持其他对象时,我得到下一个错误:
javax.persistence.EntityExistsException: A different object with the same identifier value was already associated with the session : [com.ikarus.models.ArticuloProduccion#MFE0925]
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:123) ~[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:181) ~[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:188) ~[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
at org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:794) ~[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:770) ~[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_241]
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_241]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_241]
at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.8.0_241]
at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:366) ~[spring-orm-5.2.5.RELEASE.jar:5.2.5.RELEASE]
at com.sun.proxy.$Proxy86.merge(Unknown Source) ~[na:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_241]
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_241]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_241]
at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.8.0_241]
at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:314) ~[spring-orm-5.2.5.RELEASE.jar:5.2.5.RELEASE]
at com.sun.proxy.$Proxy86.merge(Unknown Source) ~[na:na]
at org.springframework.data.jpa.repository.support.SimpleJpaRepository.save(SimpleJpaRepository.java:557) ~[spring-data-jpa-2.2.6.RELEASE.jar:2.2.6.RELEASE]
at org.springframework.data.jpa.repository.support.SimpleJpaRepository.saveAndFlush(SimpleJpaRepository.java:569) ~[spring-data-jpa-2.2.6.RELEASE.jar:2.2.6.RELEASE]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_241]
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_241]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_241]
at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.8.0_241]
at org.springframework.data.repository.core.support.RepositoryComposition$RepositoryFragments.invoke(RepositoryComposition.java:371) ~[spring-data-commons-2.2.6.RELEASE.jar:2.2.6.RELEASE]
at org.springframework.data.repository.core.support.RepositoryComposition.invoke(RepositoryComposition.java:204) ~[spring-data-commons-2.2.6.RELEASE.jar:2.2.6.RELEASE]
at org.springframework.data.repository.core.support.RepositoryFactorySupport$ImplementationMethodExecutionInterceptor.invoke(RepositoryFactorySupport.java:657) ~[spring-data-commons-2.2.6.RELEASE.jar:2.2.6.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:621) ~[spring-data-commons-2.2.6.RELEASE.jar:2.2.6.RELEASE]
at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:605) ~[spring-data-commons-2.2.6.RELEASE.jar:2.2.6.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:80) ~[spring-data-commons-2.2.6.RELEASE.jar:2.2.6.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:366) ~[spring-tx-5.2.5.RELEASE.jar:5.2.5.RELEASE]
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:118) ~[spring-tx-5.2.5.RELEASE.jar:5.2.5.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:139) ~[spring-tx-5.2.5.RELEASE.jar:5.2.5.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:178) ~[spring-data-jpa-2.2.6.RELEASE.jar:2.2.6.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:95) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212) ~[spring-aop-5.2.5.RELEASE.jar:5.2.5.RELEASE]
at com.sun.proxy.$Proxy93.saveAndFlush(Unknown Source) ~[na:na]
at com.ikarus.controllers.ArticuloController.guardarArticulo(ArticuloController.java:154) ~[classes/:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_241]
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_241]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_241]
at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.8.0_241]
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190) ~[spring-web-5.2.5.RELEASE.jar:5.2.5.RELEASE]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138) ~[spring-web-5.2.5.RELEASE.jar:5.2.5.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:105) ~[spring-webmvc-5.2.5.RELEASE.jar:5.2.5.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:879) ~[spring-webmvc-5.2.5.RELEASE.jar:5.2.5.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:793) ~[spring-webmvc-5.2.5.RELEASE.jar:5.2.5.RELEASE]
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.2.5.RELEASE.jar:5.2.5.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040) ~[spring-webmvc-5.2.5.RELEASE.jar:5.2.5.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943) ~[spring-webmvc-5.2.5.RELEASE.jar:5.2.5.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.2.5.RELEASE.jar:5.2.5.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) ~[spring-webmvc-5.2.5.RELEASE.jar:5.2.5.RELEASE]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:660) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.2.5.RELEASE.jar:5.2.5.RELEASE]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.33.jar:9.0.33]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.2.5.RELEASE.jar:5.2.5.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.5.RELEASE.jar:5.2.5.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.2.5.RELEASE.jar:5.2.5.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.5.RELEASE.jar:5.2.5.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.2.5.RELEASE.jar:5.2.5.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.5.RELEASE.jar:5.2.5.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) ~[tomcat-embed-core-9.0.33.jar:9.0.33]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) [tomcat-embed-core-9.0.33.jar:9.0.33]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) [tomcat-embed-core-9.0.33.jar:9.0.33]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) [tomcat-embed-core-9.0.33.jar:9.0.33]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) [tomcat-embed-core-9.0.33.jar:9.0.33]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) [tomcat-embed-core-9.0.33.jar:9.0.33]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) [tomcat-embed-core-9.0.33.jar:9.0.33]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373) [tomcat-embed-core-9.0.33.jar:9.0.33]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) [tomcat-embed-core-9.0.33.jar:9.0.33]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868) [tomcat-embed-core-9.0.33.jar:9.0.33]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1594) [tomcat-embed-core-9.0.33.jar:9.0.33]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.33.jar:9.0.33]
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [na:1.8.0_241]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [na:1.8.0_241]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.33.jar:9.0.33]
at java.lang.Thread.run(Unknown Source) [na:1.8.0_241]
这是我第一次在这里写帖子,请原谅我的错误,谢谢。
解决方案
推荐阅读
- google-cloud-platform - 从谷歌云存储库克隆项目作为成员
- c# - Sql server 过程选择作为插入过程的警报
- xml - 如何使用 one2many 字段为 many2one 字段设置域
- angular - 有没有办法在 Angular PipeDate 上实现 i18n
- java - 为此程序强制转换 IllegalArgumentException
- javascript - 为 json 对象的属性名称创建模型
- automationanywhere - 是否有用于打开目录文件的系统变量?
- javascript - 当我的javascript修改html并显示AJAX结果时,如何在新页面中显示结果?
- python - 使用 Python 2.7 解析内部参数
- python - 用于比较指纹的 Python 库