打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
APPFUSE开发问题记录

1。怎样跳过集成测试及相关数据库初始化操作?
解答:将pom.xml配置中增加<skipTests>true</skipTests>。

2。怎样使用外部配置变量?
解答:a。在pom.xml配置文件中加入占位符
如:            <!-- FTP settings -->
                <ftp.url>135.224.82.4</ftp.url>
                <ftp.username>ls</ftp.username>
                <ftp.password>FdbEgT+7</ftp.password>
                <ftp.path>/data/jyf/0000/SRC/</ftp.path>
      b。在resources目录下新建文本文件ftp.properties
         ftp.url=${ftp.url}
         ftp.username=${ftp.username}
         ftp.password=${ftp.password}
         ftp.path=${ftp.path}
      c。在引用的applicationContext文件节点propertyConfigurer中添加<value>classpath:ftp.properties</value>
      d。这时就可以直接使用占位符了
如:    <!--FTP Server-START-->
        <bean id="myFTP" class="com.xjgzinfo.app.util.MyFTP"
                lazy-init="true" destroy-method="destroy">
                <property name="server" value="${ftp.url}" />
                <property name="user" value="${ftp.username}" />
                <property name="password" value="${ftp.password}" />
                <property name="path" value="${ftp.path}" />
        </bean>
        <!--FTP Server-END-->

3。测试Dao时报如下错误该怎么解决?
Unsatisfied dependency expressed through bean property 'interfaceDataDefineDao': Set this property value or disable dependency checking for this bean
解答:以下列出3种解决方法,优先选择方法1。
      解决方法1:测试初始化没有自动加载webapp/WEB-INF/applicationContext.xml文件,把该文件复制到target\classes\目录下即可。
      解决方法2:修改build path将src/main/webapp的out put folder修改成default output folder(实际是target/classes),此方法实际是将webapp里的文件都复制到target/classes里,使得测试过程可以访问到applicationContext.xml文件。
      解决方法3:复制target/test-classes/的WEB-INF文件夹到target/classes目录下,使得集成测试可以访问该目录下的文件。

4。怎样解决测试报“Embedded error: java.sql.SQLException: ORA-01401: 插入的值对于列过大”错误?
解答:检查hmb2ddl生成的数据表字段的实际类型及大小,再跟test/resources/samples-data.xml里对应的表的测试数据比较,检查是否跟实际数据库表中数据类型不匹配。有时appfuse自动产生的测试数据过大造成的,修改测试数据即可。

5。怎样使用本地mvean_proxy?
解答:本地运行java -jar maven-proxy-standalone-0.2-app.jar maven-proxy.properties,然后在pom.xml库中修改配置

<repositories>
                <repository>
                        <id>central</id>
                        <name>xjgzinfo Central Repository</name>
                        <url>http://135.224.80.12:9999/repository</url>
                        <snapshots>
                                <enabled>true</enabled>
                        </snapshots>
                        <releases>
                                <enabled>true</enabled>
                        </releases>
                </repository>
                <repository>
                        <id>appfuse</id>
                        <url>http://static.appfuse.org/repository</url>
                </repository>
                <repository>
                        <id>Maven2</id>
                        <url>http://repo1.maven.org/maven2</url>
                </repository>
                <!-- Needed for Facelets -->
                <repository>
                        <id>java.net</id>
                        <url>http://download.java.net/maven/1/</url>
                        <layout>legacy</layout>
                </repository>
        </repositories>

        <pluginRepositories>
                <pluginRepository>
                        <id>central</id>
                        <name>xjgzinfo Central Repository</name>
                        <url>http://135.224.80.12:9999/repository</url>
                </pluginRepository>
                <pluginRepository>
                        <id>appfuse</id>
                        <url>http://static.appfuse.org/repository</url>
                </pluginRepository>
        </pluginRepositories>

6。使用JSF时怎样向菜单上添加子菜单,及关联事件处理代码?
解答:a.首先在ApplicationResources.properties资源配置文件中添加变量
例如:# -- auditReport day tast page --
auditReportDayTask.execute=AuditReport Task Run
auditReportDayTask.executed=AuditReport has been runned successfully.
# -- AuditReport-END
      b.向AuditReportForm.java文件中添加事件响应代码
例如:    public String auditDay() {
            auditReportManager.autoAuditDay();
            addMessage("auditReportDayTask.executed");
            
            return "mainMenu";
    }
      c.在mainMenu.xhtml文件中添加commandLink
例如:<h:commandLink value="#{text['auditReportDayTask.execute']}" action="#{auditReportForm.auditDay}"/>

7。怎样向Mvean中installing 3rd party JARs?
解答:To install a JAR in the local repository use the following command:

mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> \
    -DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging>

例如:mvn install:install-file -Dfile=quartz-1.6.0.jar -DgroupId=quartz -DartifactId=quartz -Dversion=1.6.0 -Dpackaging=jar

8。怎样在pom.xml中配置3rd party JARs,使得mvn integration-test集成测试后打包成war文件?
解答:向dependency中添加依赖,通过第7步的安装就可以从本地库中引用第三方jar文件了。
例如:        <!-- Dependencies calculated by AppFuse when running full-source plugin -->
              <dependency>
                      <groupId>quartz</groupId>   
                      <artifactId>quartz</artifactId>
                      <version>${quartz.version}</version>  
                      <scope>compile</scope>
              </dependency>
                ...
              <!-- Properties calculated by AppFuse when running full-source plugin --> 
              <quartz.version>1.6.0</quartz.version>

9。怎样使用Ioc在Spring框架中使用bean自动管理对象?
解答:a.编写需要被Spring管理的类,如MyFTP.java;
      b.在applicationContext.xml或applicationContext-resources.xml中配置bean;
      如:
        <!--FTP Server-START-->
        <bean id="myFTP" class="com.xjgzinfo.app.util.MyFTP"
                lazy-init="true" destroy-method="destroy">
                <property name="server" value="${ftp.url}" />
                <property name="user" value="${ftp.username}" />
                <property name="password" value="${ftp.password}" />
                <property name="localResource" value="${ftp.localPath}" />
                <property name="remotePath" value="${ftp.remotePath}" />
        </bean>
        <!--FTP Server-END-->

10。怎样使用由Spring自动管理的bean对象?
解答:a.在需要使用该bean的类中添加该属性对象,如NamedSQLParser xmlParser = null;
并添加相应的get和set方法;
      b.在applicationContext.xml中配置该bean;
        <!--AuditReportManager-START-->
        <bean id="auditReportManager"
                class="com.xjgzinfo.app.service.impl.AuditReportManagerImpl">
                <constructor-arg ref="auditReportDao" />
                <property name="myftp" ref="myFTP" />
                <property name="xmlParser" ref="namedSQLParser" />
        </bean>
        <!--AuditReportManager-END-->
      c.在AuditReportManagerImpl.java类中直接使用xmlParser属性,该对象已经在auditReportManager由Spring装载时实例化了。

11。在使用Spring框架时怎样通过application context访问资源?
解答:a.通过虚拟路径来存取.如果我们的资源文件位于CLASSPATH下,我们就可以通过这种方法来获取资源文件,获取代码如下:
ApplicationContext context = new FileSystemXmlApplicationContext("src/org/spring/test/applicationContext.xml");
Resource resource = context.getResource("classpath:message.properties");
这里需要注意的是classpath:是spring约定的URL虚拟路径.
b.或通过实际路径来存取:
获取代码如下:
ApplicationContext context = new FileSystemXmlApplicationContext("src/org/spring/test/applicationContext.xml");
Resource resource = context.getResource("file:D:/JProject/SpringTest/src/message.properties");
c.或通过相对路径来存取:
获取方法:
ApplicationContext context = new FileSystemXmlApplicationContext("src/org/spring/test/applicationContext.xml");
Resource resource = context.getResource("src/message.properties");

12。怎样把Resource作为属性来配置?
解答:a.首先创建待配置bean的java源文件AuditReportManagerImpl.java,该文件中要有Resource类型属性,如UrlResource,ClassPathResource,FileSystemResource,ServletContextResource,InputStreamResource,ByteArrayResource其中一种资源变量。例如private ClassPathResource xmlResource;
      b.然后在applicationContext.xml或applicationContext-resources.xml配置文件中配置该bean;
      如:
        <!--NamedSQLParser Server-START-->
        <bean id="namedSQLParser" class="com.xjgzinfo.app.util.NamedSQLParser">
                <property name="xmlResource" value="classpath:nativeSQL.hbm.xml"/>
        </bean>
        <!--NamedSQLParser Server-END-->
      c.通过web.xml中配置的监听,如    
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
该监听会在web容器启动时对该web应用实例化ApplicationContext对象,通过a,b两步的配置ApplicationContext对象会实例化该资源,并获取classpath下的nativeSQL.hbm.xml资源文件返回给AuditReportManagerImpl.java中的Resource类型属性,在本例中我的xmlResource属性就可以在AuditReportManagerImpl中直接使用了。

13。怎样使用命名查询?
解答:a.在src/main/resources/目录下建立命名查询的配置文件,如:nativeSQL.hbm.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 
        This is the native SQL entity queries config document.
        You must list all columns of the entity.The primary key must unique.
        You will get a list with entity object.
-->
<hibernate-mapping>
        <sql-query name="1000PARA01">
                <return alias="auditReport"
                        class="com.xjgzinfo.app.model.AuditReport">
                </return>
                <![CDATA[
select min(rownum) as {auditReport.id},
       NULL     as {auditReport.acct_date},
       NULL     as {auditReport.acct_month},
       NULL     as {auditReport.audit_name},
       product_type as {auditReport.field1},
       state as {auditReport.field2},
       count(1) as {auditReport.field3},
       NULL     as {auditReport.field4},
       NULL     as {auditReport.field5},
       NULL     as {auditReport.field6},
       NULL     as {auditReport.field7},
       NULL     as {auditReport.field8},
       NULL     as {auditReport.field9},
       NULL     as {auditReport.field10},
       NULL     as {auditReport.field11},
       NULL     as {auditReport.field12},
       NULL     as {auditReport.field13},
       NULL     as {auditReport.field14},
       NULL     as {auditReport.field15},
       NULL     as {auditReport.field16},
       NULL     as {auditReport.field17},
       NULL     as {auditReport.field18},
       NULL     as {auditReport.region_name},
       NULL     as {auditReport.partition_id_region}
     from ls6_para.product_t@ysdb
       group by product_type, state
                ]]>
        </sql-query>
</hibernate-mapping>
      b.在src/main/resources/hibernate.cfg.xml文件中添加资源文件
        <mapping resource="nativeSQL.hbm.xml" />
      c.在DaoHibernate实现java文件类中就可以通过调用super.getHibernateTemplate().findByNamedQuery(queryName);方法执行命名查询了。而且super.getHibernateTemplate().findByNamedQueryAndNamedParam()方法支持带参数的sql语句。
      d.注意!命名查询语句必须给出完整的对应与AuditReport对象属性的字段,否则会报“nested exception is java.sql.SQLException: 列名无效”的错误。当AuditReport对象设定关键字时,{auditReport.id}的值不能为NULL,否则会报“java.lang.NullPointerException”的错误;{auditReport.id}的值要唯一才能正确返回结果,否则返回的List<AuditReport>中的AuditReport对象都一样。

14。怎样使用Dom4j读取XML文件?
解答:a。导入如下包:
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
      b。采用如下语句片段读取XML节点:
        private List namedSQL;// 命名查询列表,用于存放解析后得到的命名查询

        private ClassPathResource xmlResource;// 待解析的XML文件名
try {
                        // 采用Dom4j解析nativeSQL.hbm.xml文件
                        List errors = new ArrayList();
                        Document doc;
                        XMLHelper xmlHelper = new XMLHelper();
                        doc = xmlHelper.createSAXReader(this.xmlResource.getFilename(),
                                        errors, XMLHelper.DEFAULT_DTD_RESOLVER).read(
                                        this.xmlResource.getInputStream());
                        final Element root = doc.getRootElement();// 取得root跟节点
                        // 遍历XML树
                        for (Iterator i = root.elementIterator("sql-query"); i.hasNext();) {
                                Element sqlQuery = (Element) i.next();
                                this.namedSQL.add(sqlQuery.attributeValue("name"));// 获取该节点的name属性
                        }
                        if (errors.size() != 0) {
                                throw new MappingException("invalid configuration",
                                                (Throwable) errors.get(0));
                        }
                } catch (DocumentException ex) {
                        ex.getStackTrace();
                } catch (IOException ex) {
                        ex.getStackTrace();
                }
       c。对以上语句的解释,xmlResource是资源文件对应的变量,对应的XML文件就是以上13问答用到的nativeSQL.hbm.xml文件。该资源使用方法见以上12解答。XMLHelper.DEFAULT_DTD_RESOLVER是对XML文件中DOCTYPE标记进行解析的解析器,该解析器碰到http://hibernate.sourceforge.net描述资源时首先会到hibernate-3.2.5.ga.jar文件的org/hibernate路径下寻找指定的dtd文件,如果找不到才会到http://hibernate.sourceforge.net网站读取该dtd文件。具体使用方法可以参照hibernate-3.2.5.ga.jar/org/hibernate/util/下的XMLHelper.class、ConfigHelper.class和DTDEntityResolver.class

15。测试时报“ Error executing database operation: CLEAN_INSERT
Embedded error: Listener refused the connection with the following error:
ORA-12518, TNS:listener could not hand off client connection
The Connection descriptor used by the client was:
localhost:1521:Ora9i”怎么处理?
解答:提示这个错误的原因是由于当前配置的Ora9i数据库不能连接。检查网络或开启数据库实例。

16。使用Oracle作数据库时,PL/SQL Developer工具连接数据库正常,但是测试时报“[INFO] Error executing database operation: CLEAN_INSERT
             Embedded error: my_table_name_t”,是怎么回事?

解答:这是因为在appfuse中数据库配置方案名要大写,如下配置:
                <!-- Database settings -->
                <dbunit.dataTypeFactoryName>
                        org.dbunit.ext.oracle.OracleDataTypeFactory
                </dbunit.dataTypeFactoryName>
                <dbunit.schema>HR</dbunit.schema><!-- Make sure to capitalize the schema name 这里已经清楚地告诉我们方案名要大写-->
                <dbunit.operation.type>CLEAN_INSERT</dbunit.operation.type>
                <hibernate.dialect>
                        org.hibernate.dialect.Oracle9iDialect
                </hibernate.dialect>
                <hibernate.show_sql>true</hibernate.show_sql>
                <jdbc.groupId>com.oracle</jdbc.groupId>
                <jdbc.artifactId>ojdbc14</jdbc.artifactId>
                <jdbc.version>10.2.0.2.0</jdbc.version>
                <jdbc.driverClassName>
                        oracle.jdbc.OracleDriver
                </jdbc.driverClassName>
                <jdbc.url>
                        <![CDATA[jdbc:oracle:thin:@localhost:1521:Ora9i]]>
                </jdbc.url>
                <jdbc.username>hr</jdbc.username>
                <jdbc.password>hr</jdbc.password>

17。采用Hibernate3时对于大批量保存操作该怎么处理?
解答:对于大批量的数据入库操作,要定量刷新缓存,采用super.getSession().flush(),Hibernate会自动生成原始SQL语句,将内存中的数据持久化到数据库中。否则会导致内存溢出。采用如下语句:   
         /**
         * 批量插入VO
         * 
         * @param objs
         *            批量插入transient态的VO结果集
         */
        public List batchInsert(List<AuditReport> objs) {
                log.debug("Inserting into table by List<AuditReport>.");

                try {
                        for (int i = 0; i < objs.size(); i++) {
                                super.getHibernateTemplate().save(objs.get(i));
                                if (i % 20 == 0) {
                                        super.getSession().flush();
                                        super.getSession().clear();
                                }
                        }
                        return objs;
                } catch (DataAccessException dae) {
                        log.error("insert into table by collection fail.", dae);
                        throw dae;
                } catch (RuntimeException re) {
                        log.error("insert into table by collection fail.", re);
                        throw re;
                }
        }

18.通过代理怎么构建应用(执行命令mvn archetype:create...)?
解答:在命令行后面加上-DproxySet=true -DproxyHost=10.238.37.141 -DproxyPort=8080这个http代理设置,如果还有错误加上-U强制更新。

19.通过代理执行mvn appfuse:full-source命令提示,提示[ERROR] 175002 : svn: appfuse.dev.java.net怎么处理?
解答:在windows平台命令行输入echo %APPDATA%,找到该文件夹位置,进入Subversion文件夹,输入edit servers:
[global]
http-proxy-host = your.proxy.name
http-proxy-port = 3128
保存就设置了subversion使用代理,如果还是提示有java.net.UnknownHostException: appfuse.dev.java.net这个异常,尝试使用mvn appfuse:full-source  -DproxySet=true -DproxyHost=10.238.37.141 -DproxyPort=8080就可以解决,似乎maven和subversion需要分别设置代理。

20.执行mvn appfuse:full-source,mvn eclipse:eclipse等命令报“Unsupported major.minor version 49.0”错误怎么处理?
解答:这是由于使用了较低版本的JDK所致,升级环境变量中的JDK就可以了。

21.怎样使开发数据库和测试数据库分开?
解答:appfuse2默认配置测试和开发是用同一个jdbc.properties的(在cmd下,如果在eclipse下,情况复杂些)。修改项目的pom.xml 如下
        <testResources> 
            <testResource> 
                <directory>src/test/resources</directory> 
                <filtering>true</filtering> 
            </testResource> 
            <testResource> 
                <directory>src/main/webapp</directory> 
                <filtering>true</filtering> 
                <includes> 
                    <include>**/*.xml</include> 
                </includes> 
            </testResource> 
            <testResource>   
                <directory>src/main/resources</directory>   
                <excludes>   
                    <exclude>**/*jdbc*.properties</exclude>   
                </excludes>   
            </testResource> 
        </testResources>
蓝色是添加的部分,红色是可以根据情况修改的。
这样修改后,开发数据库和测试数据库就可以分开独立了

22.怎样使用了UrlRewrite实现了url的重写?
解答:首先在web.xml中配置一个过滤器:
    <filter>
        <filter-name>rewriteFilter</filter-name>
        <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
        <init-param>
            <param-name>logLevel</param-name>
            <param-value>commons</param-value>
        </init-param>
    </filter>

    <filter-mapping>
        <filter-name>rewriteFilter</filter-name>
        <url-pattern>/**//*</url-pattern>
         <!--dispatcher>REQUEST</dispatcher>
         <dispatcher>FORWARD</dispatcher-->
     </filter-mapping>
然后在WEB-INF目录下有一个配置文件urlrewrite.xml内容如下:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 3.0//EN"
    "http://tuckey.org/res/dtds/urlrewrite3.0.dtd">
<!-- https://urlrewrite.dev.java.net/manual/3.0 -->
<urlrewrite>
    <rule>
        <from>^/user/(.*).html$</from>
        <to type="forward">/editUser.html\?username=$1</to>
    </rule>
</urlrewrite>

23.怎样去掉appfuse显示日期时间的时候的秒后边的?
解答:修改service中的DateUtil.java文件getDateTimePattern()函数即可。

24.怎样修改validate的电话号码规则?
解答:修改文件\metadata\web\validation-global.xml文件,
<constant>
        <constant-name>phone</constant-name>
        <constant-value>^(\(\d+\)){0,1}\d*-{0,1}\d+$</constant-value>
 </constant>

24.怎样更改项目样式主题?
解答:修改web.xml中csstheme的值为%project%\src\main\webapp\styles目录下的puzzlewithstyle、andreas01或simplicity的其中一个即可。

25.如何配置成本地的tomcat?
解答:修改pom.xml中的<home>打开,屏蔽<zipUrlInstaller>,如下所示:
  <home>${cargo.container.home}</home> 
  <!--zipUrlInstaller> 
    <url>${cargo.container.url}</url> 
    <installDir>${installDir}</installDir> 
  </zipUrlInstaller-->

26.Eclipse中不能修改M2_REPO的默认路径,怎么办?
解答:在~/.m2/路径下放置MAVEN的配置文件$MAVEN_HOME$/conf/setting.xml,在这个文件中配置repository的路径即可。

27.怎样在tomcat中集成开发?
解答:在tomcat6.0.18上部署(用于开发,不用将war文件复制到tomcat的webapp目录下):
1.在tomcat的conf目录中,新建 Catalina(注意大小写)\localhost目录,在该目录中新建一个xml文件,名字可以随意取,只要和当前文件中的文件名不重复就行了,如,t5appfuse.xml,该xml文件的内容为:
<Context path="/t5appfuse" docBase="F:/eclipse/workspace/tapestry5-appfuse/target/t5-appfuse-demo-1.0.1" debug="0" privileged="true">
</Context>

2.每次集成测试,执行mvn integration-test就会更新所有文件。tomcat6支持热部署,更新的内容就会生效。

28.中文乱码怎么解决?
解答:在执行mvn integration-test时会自动将某些资源文件编码成UTF-8,参见pom.xml的native2ascii-maven-plugin节点。有时需要手工做这个事情。方法为:把自动生成的ApplicationResources_zh_CN.properties文件用UE编辑,配置好后用native2ascii转成UTF-8格式,放到tomcat中就可以了。命令如下:
native2ascii -encoding UTF-8 H:\eclipse\workspace\mywork\myStorage\src\main\resources\ApplicationResources_zh_CN.properties h:\ApplicationResources_zh_CN.properties

app_zh_CN.properties内容跟ApplicationResources_zh_CN.properties内容一样,可以将ApplicationResources_zh_CN.properties拷贝过去改名成app_zh_CN.properties

在使用mysql时,展现中文正常,输入中文保存到数据库都是"?"号。这种情况需要在安装mysql时选择编码格式为UTF8就可以解决。

29.编写都没有问题了,执行mvn integration-test就是报错?
解决:a.检查model中的类map有没有加到test下的hibernage.cfg.xml配置文件中。
      b.将ResourceBundle.getBundle(MESSAGES);换成ResourceBundle.getBundle(MESSAGES, Locale.ENGLISH);

30.mysql数据库中文问题?
解决:mysql默认是latin1字符集,不支持中文,需要将mysql的按照目录下的my.ini配置文件中的两处default-character-set=latin1替换成default-character-set=utf8,重启后创建的数据库及表都是utf-8字符集的了。

31.怎样定制代码生成模板?
解决:在项目目录下执行mvn appfuse:copy-templates,模板被复制到src/test/resources/appfuse...目录下。OK,现在可以自由发挥了。

32.怎样使用第三方的repository?
解决:在POM文件中的repositorys节点下新增加repository,如:
        <repository>
            <id>tapestry</id>
            <url>http://tapestry.formos.com/maven-repository</url>
        </repository>

33.appfuse的tapestry5.1版的userSession的BUG
解决:MainMenu.java中将currentUser写入session是在MainMenu页面pageLoad事件里,这里存在BUG。只有该页面加载到页面池时userSession会保存currentUser信息。当前用户退出或其他用户登录都不会再执行该页面的pageLoad事件,而是直接从页面池中获取,userSession中currentUser总是为空。解决办法是改成onActivate()事件加载登录用户信息。

        void onActivate() {
                if (userSession.getCurrentUser() == null) {
                        logger.info("Storing user info in the SSO");
                        userSession.setCurrentUser((User) getUserInfo());
                        userSession.setCookieLogin(true);
                }
        }

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
spring 编程入门十大问题解答
Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(二)
MyEclipse Spring Hibernate整合开发 - liuxinglanyue - JavaEye技术网站
Eclipse快速上手Hibernate--3.利用XDoclet开发
Struts2、Spring和Hibernate应用实例
Spring hibernate的单元测试Junit|中国IT实验室,数据回滚
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服